删除Pandas中列之间的多个空格

时间:2016-04-26 16:17:18

标签: python pandas

我有一个看起来像

的文件(可以保存为txt,csv或其他)
name    num at  res   x   y   z
AB        1 TY   A    1.0-2.3 3.4
BC        2 ER   B    2.1 3.4 -4.5
CD        3 TY   A    2.3 32  -5.6
..

我希望能够提取“at”列中的所有元素,然后打印出该列中唯一元素的列表。我以前在文件中读取的命令是df = pd.read_csv("file.csv")

但是,如果我尝试print df['at'].head(),我会收到有关哈希表和KeyError: 'at'的错误

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

<强>更新

你在第2024行遇到问题(熊猫数从0开始!):

  

预计在2024行的12个油田,看到13个

因此您可能希望清理数据或忽略错误这样的行:

df = pd.read_csv(..., delim_whitespace=True, error_bad_lines=False, ...)

OLD回答:

最有可能的是,您错误地读取了CSV文件。

如何检查:

print df.columns.tolist()

并注意列名

中的前导/尾随空格

如何解决这个问题:

df = pd.read_csv(..., sep='\s+', ...)

df = pd.read_csv(..., delim_whitespace=True, ...)

答案 1 :(得分:0)

我认为您需要添加参数sep作为read_csv

的分隔符
  • sep="\s+"任意空格
  • sep='\t'标签
  • sep=r'\s{2,}'两个或更多个空格

样品:

import pandas as pd
import io

temp=u"""ame num at  res x y z
AB 1 TY A 1.0 -2.3 3.4
BC 2 ER B 2.1 3.4 -4.5
CD 3 TY A 2.3 32 -5.6
"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), sep="\s+")
print df
  ame  num  at res    x     y    z
0  AB    1  TY   A  1.0  -2.3  3.4
1  BC    2  ER   B  2.1   3.4 -4.5
2  CD    3  TY   A  2.3  32.0 -5.6