Pandas读取csv时出现格式错误



我需要加载一个csv文件,其中空格用作制表,如下所示:

2021-08-27 12:21:28.259 2021-08-25 17:36:52.045 1,9253 -2,0298 -1,3901 356,6895 111,0229 893,0664 -162,1033 -35,9802 131,6052

但是有些行格式不好,其中值太大,并且没有空格

2021-08-27 12:21:28.350 2021-08-25 17:36:52.155 -4,7617 -5,2017 -8,0220 -1484,8022 -127,9907-1999,7559 99,7943 -55,4700 -109,0063

所以当我导入csv与pd.read_csv()我得到一些行移位值。

我尝试逐行编辑文本文件,在-之前添加空白,但处理时间太长。

是否有一个快速的方法来编辑csv,而加载?

好东西每个列总是在固定位置开始(和结束),但我没有找到任何方法加载csv在熊猫知道列开始/结束索引

更新:

使用read_fwf如下:

pandas.read_fwf('test.csv', header=None)

可能可以工作,但不能与问题中提供的文件示例一起工作。

可以帮助python通过像这样提供字段的位置:

colspecs = [(0, 10), (11, 23), (24, 34), (35, 47), (48, 58), (58, 68), (68, 78), (78, 89), (89, 99), (99, 109), (109, 120), (120, 130), (130, 140)]
pandas.read_fwf('test.csv', infer_nrows = 13, header=None, colspecs = colspecs)

链接到文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_fwf.html

这个答案描述了如何手动解析文件。较好的解决方案是使用pandas.read_fwf

由于所有列的大小相同,因此可以使用列表推导式拆分列:

# data.csv
2021-08-27 12:21:28.350 2021-08-25 17:36:52.155    -4,7617   -5,2017   -8,0220 -1484,8022 -127,9907-1999,7559    99,7943  -55,4700 -109,0063
2021-08-27 12:21:28.259 2021-08-25 17:36:52.045     1,9253   -2,0298   -1,3901   356,6895  111,0229  893,0664  -162,1033  -35,9802  131,6052
import itertools # accumulate
def load_file(filename, widths):
with open(filename, 'r') as f:
table = []
for line in f:
table.append([line[p:p+w] for w,p in zip(widths, itertools.accumulate(widths, initial=0))])
return table
print(load_file('data.csv', [11,13,11,13,10,10,10,11,10,10,11,10,10]))
# [['2021-08-27 ', '12:21:28.350 ', '2021-08-25 ', '17:36:52.155 ', '   -4,7617', '   -5,2017', '   -8,0220', ' -1484,8022', ' -127,9907', '-1999,7559', '    99,7943', '  -55,4700', ' -109,0063'],
#  ['2021-08-27 ', '12:21:28.259 ', '2021-08-25 ', '17:36:52.045 ', '    1,9253', '   -2,0298', '   -1,3901', '   356,6895', '  111,0229', '  893,0664', '  -162,1033', '  -35,9802', '  131,6052']]

然后你可以直接将结果表加载到pandas中,并希望它能正确解析所有的数字和日期;或者,如果您尝试更手动地解析值,那么.strip()将非常有助于删除所有尾随空格。

相关内容

  • 没有找到相关文章

最新更新