[英]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.