繁体   English   中英

从csv汇入时,Pandas合并2栏

[英]Pandas combines 2 columns when importing from csv

我正在使用Python 3.3.5和pandas 0.16.2。 当尝试从csv读取文件时,当第一个列中数据的末尾有空字符(00)时,它将两列合并在一起。

因此,数据为4列,如下所示:

"LANE_1<NUL>","17","21.8","68.3"

其中,<NUL>是空字符或十六进制00。它将前两个逗号分隔的项目放入一个项目中,结果为

LANE_1',17' | 21.8 | 68.3

使3列而不是4列

LANE_1 | 17 | 21.8 | 68.3

就像熊猫无法识别第一个逗号一样。 有什么方法可以解决此问题,而不必去修改所有.csv文件以删除空字符? Excel似乎可以很好地打开前两列来打开文件。

如果NUL不是您数据的组成部分,而是人为因素/噪音,则我希望对其进行清理。 否则,以后使用数据时可能会遇到麻烦。

如果您知道null仅会出现在分隔符上,则可以使用正则表达式分隔符:

In [43]: s
Out[43]: 'a\x00,b,c\nd\x00,e,f'

In [44]: print s
a,b,c
d,e,f

In [45]: pd.read_csv(StringIO.StringIO(s))
Out[45]: 
   a,b  c
0  d,e  f

In [46]: pd.read_csv(StringIO.StringIO(s), sep="\x00?,", engine="python")
Out[46]: 
   a  b  c
0  d  e  f

编辑:

正如您所指出的那样,引用有点奇怪。 另一个提示数据清除实际上可能更好的答案,但是您可以通过一些不太好的技巧来解决它:

In [109]: s = '"a\x00","b","c"\n"d\x00","e","f"'

In [110]: pd.read_csv(StringIO.StringIO(s), sep='\x00?,', engine="python")
Out[110]: 
   "a"  "b"  "c"
0  "d"  "e"  "f"

In [111]: pd.read_csv(StringIO.StringIO(s), sep='\x00?,',
converters={c: lambda x: x.strip('\x00"') for c in xrange(3)}, engine="python")
Out[111]: 
  "a" "b" "c"
0    d   e   f

In [112]: df = pd.read_csv(StringIO.StringIO(s), sep='\x00?,',
converters={c: lambda x: x.strip('\x00"') for c in xrange(3)}, engine="python")

In [113]: df.columns = [c.strip('\x00"') for c in df.columns]

In [114]: df
Out[114]: 
   a  b  c
0  d  e  f

当您运行pandas.read_csv()方法时,可以使用index_col = False参数来获取标准的标准整数列索引。 即:

df = pandas.read_csv(pathname, index_col=False)

如果列的名称实际上很重要,则可以像现在一样创建数据框,然后使用正确的逗号分隔标签列表重命名这些列。 该命令将是:

df.columns = list_of_column_labels

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM