[英]Pandas is not Reading Entire .CSV File
我一直在测试我在 Pandas 上遇到的一些问题。 我的最终目标是将数据添加到 .csv。 在寻找更改 .csv 的方法时,我选择了这种方法:
import pandas
data = pandas.read_csv('path/to/my/script/test.csv')
data.iat[1,1] = 'DataHere'
data.to_csv('path/to/my/script/test.csv', index=False, header=False)
这段代码工作得有些正确。 DataHere
转到第二行第二列,这是正确的(因为 [0,0] 是第一行和第一列。注意:它不是正常的 x,y 坐标,它更像是 y,x)。
代码前的 test.csv (6x6):
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
代码后的test.csv(6x5):
yes,yes,yes,yes,yes,yes
yes,DataHere,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
由于某种原因,它摆脱了最下面的一行! 所以我对pandas.read_csv('path/to/my/script/test.csv')
的参数做了一些处理来解决这个问题,得到了这个:
data = pandas.read_csv('path/to/my/script/test.csv', nrows=6, skip_blank_lines=False)
我添加了nrows=6
以使其读取6行,尽管我确实打算在将来使它更高。 我添加了skip_blank_lines=False
因为我希望能够将数据添加到空白单元格。
当我运行这个新代码时(将 csv 更改为之前的 6x6 状态后),它没有帮助。 它仍然会擦除第 6 行。
import pandas
data = pandas.read_csv('path/to/my/script/test.csv', nrows=6, skip_blank_lines=False)
data.iat[1,1] = 'DataHere'
data.to_csv('path/to/my/script/test.csv', index=False, header=False)
我还尝试data.iat[6,3] = 'DataHere'
而不是data.iat[1,1] = 'DataHere'
,它返回了这个错误:
IndexError: index 6 is out of bounds for axis 0 with size 5
这表明它不仅在擦除最后一行,而且无法将数据添加到空白单元格。 为了确保这是这一行的错: data = pandas.read_csv('path/to/my/script/test.csv', nrows=6, skip_blank_lines=False)
,我把print(data)
放在了这一行紧随其后并得到这个输出(加上前面提到的错误)。 那里应该有第 5 行“是”。 所以我的两个问题是:
pandas.read_csv('path/to/my/script/test.csv')
使用第一行作为标题行。 您的test.csv
没有标题行。 因此很可能test.csv
中的第一行(数据行)被读取为标题行。 给你 5 个数据行,而不是你期望的 6 个。
这可能正在发生
sim_csv = io.StringIO(
'''yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes
yes,yes,yes,yes,yes,yes'''
)
data = pd.read_csv(sim_csv)
print(data)
yes yes.1 yes.2 yes.3 yes.4 yes.5
0 yes yes yes yes yes yes
1 yes yes yes yes yes yes
2 yes yes yes yes yes yes
3 yes yes yes yes yes yes
4 yes yes yes yes yes yes
然后,当您使用to_csv(header=None)
写出 CSV 时,您会丢失第一行数据。
为了解决这个问题,你可以这样做:
pandas.read_csv('path/to/my/script/test.csv', header=None)
或者你可以这样做:
pandas.to_csv('path/to/my/script/test.csv')
只要确保您与header=None
一致,您可以将pandas.read_csv
和pandas.to_csv
都设置为header=None
,或者只是删除它,不要在其中一个或另一个上设置header=None
。
添加行(单元格到新行)
您可以使用索引添加一行(单元格到一行)。 例如,如果您有:
yes yes.1 yes.2 yes.3 yes.4 yes.5
0 yes yes yes yes yes yes
1 yes yes yes yes yes yes
2 yes yes yes yes yes yes
3 yes yes yes yes yes yes
4 yes yes yes yes yes yes
然后你可以这样做:(注意这是.at
而不是.iat
)
df.at[5,'yes'] = 'yes'
这会给你:
yes yes.1 yes.2 yes.3 yes.4 yes.5
0 yes yes yes yes yes yes
1 yes yes yes yes yes yes
2 yes yes yes yes yes yes
3 yes yes yes yes yes yes
4 yes yes yes yes yes yes
5 yes NaN NaN NaN NaN NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.