我有一个有错误的csv文件。一些行有4个分隔符(;),而大多数行具有5个分隔符(;)。我有时有4个分隔符的原因是因为有时第2列不见了。
示例:
var1;var2;var3;var4;var5
1;10;john;40;56
2;mary;34;78
3;90.0;smith;52;45
如果导入csv文件:
import pandas as pd
df=pd.read_csv('myfile.csv', sep=";")
我获得 Dataframe :
var1 var2 var3 var4 var5
1 10 john 40 56
2 mary 34 78
3 90.0 smith 52 45
我想要:
var1 var2 var3 var4 var5
1 10 john 40 56
2 NaN mary 34 78
3 90.0 smith 52 45
也许我可以将 Dataframe 分成两部分(一部分为5“;“,另一个用4“;“)并在最后追加。我从代码开始:
import csv
with open('myfile.csv',newline='') as fin, open('output.csv','w',newline='') as fout:
reader = csv.reader(fin)
writer = csv.writer(fout)
for row in reader:
if len(row) > 4:
writer.writerow(row)
但我得到的错误:“行包含NUL”。
4条答案
按热度按时间x6492ojm1#
解决方法是将DataFrame的
shift
部分:输出:
lf5gs5x22#
如果需要,您可以按照以下方式预处理
file.csv
插入;
,让file.csv
内容为然后
创建包含以下内容的file_fixed.csv
说明:如果行有3个
;
,则使用;;
替换;
一次(即,仅使用;;
替换第一个;
)py49o6xq3#
基于
numpy.roll
和pandas.DataFrame.apply
的另一种可能的解决方案:输出量:
k2fxgqgv4#
关于你最后遇到的特定错误,你会发现打开你的“output.csv”,它不包含任何东西,这就是为什么当你试图打开它时会抛出错误(* 我想是通过使用pd.read_csv?*)。
如果在阅读循环中添加一行
print
,您会注意到每行是一个1元素的字符串列表,其中的值用分号分隔,而不是5元素的值列表。这是因为你必须告诉你的读取器方法你使用分号作为分隔符(而不是默认的
,
)。所以如果你为你的读取器和写入器指定分隔符;
,它将创建一个新的csv文件,其中只有行而没有缺失值:希望这对你有帮助