说我有csv数据,例如:
a
b,c
d,e,f
g,h
i
(请注意缺少逗号,表示空值)
如何将其加载到DataFrame中,以使空值被NaN(或至少是某些东西)填充,如下所示?
0 1 2
0 a NaN NaN
1 b c NaN
2 d e f
3 g h NaN
4 i NaN NaN
答案 0 :(得分:0)
您所要做的就是在文件的开头添加,,
,使其像这样:
,,
a
b,c
d,e,f
g,h
i
然后它将完全按照您的想象读取。
这是pd.read_csv('test.csv')
的输出:
Unnamed: 0 Unnamed: 1 Unnamed: 2
0 a NaN NaN
1 b c NaN
2 d e f
3 g h NaN
4 i NaN NaN
答案 1 :(得分:0)
这里:
pd.read_csv('myfile.csv', header=None)
您可以自己填写缺失的值。除非数据有些不同,否则这应该可以工作。
答案 2 :(得分:0)
这对我来说适用于以上数据:
import io
import pandas as pd
def add_delimiters(fpath, delimiter=','):
s_data = ''
max_num_delimiters = 0
with open(fpath, 'r') as f:
for line in f:
s_data += line
delimiter_count = line.count(delimiter)
if delimiter_count > max_num_delimiters:
max_num_delimiters = delimiter_count
s_delimiters = delimiter * max_num_delimiters + '\n'
return io.StringIO(s_delimiters + s_data)
pd.read_csv(add_delimiters('data.csv'))
在尝试加载数据时,仅调用pd.read_csv('data.csv', header=None)
会引发ParseError。 ParserError: Error tokenizing data. C error: Expected 1 fields in line 2, saw 2
这似乎是默认行为,而不是需要通过在第一行添加额外的定界符来手动编辑数据。或者至少应该有一个可以升起的旗帜来完成这项工作。