Python 如何读取带有熊猫的csv文件,在标题中的行中包含更多分隔符?
我想从Pandas中使用read_csv函数读取csv文件,该文件的行中有更多的分隔符,而在标题中没有。熊猫认为第一列是多索引的。“NAME”列可以有任意数量的分隔符,受影响的列可以是任意一个(我们不知道哪一个受影响),甚至不止一个 我试图调整read_csv的关键字参数,但没有成功。我正在使用Python 3.7.0和Pandas 0.25.0。但是,Excel可以正确读取文件Python 如何读取带有熊猫的csv文件,在标题中的行中包含更多分隔符?,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我想从Pandas中使用read_csv函数读取csv文件,该文件的行中有更多的分隔符,而在标题中没有。熊猫认为第一列是多索引的。“NAME”列可以有任意数量的分隔符,受影响的列可以是任意一个(我们不知道哪一个受影响),甚至不止一个 我试图调整read_csv的关键字参数,但没有成功。我正在使用Python 3.7.0和Pandas 0.25.0。但是,Excel可以正确读取文件 导入熊猫 打开('test.csv',mode='w')作为csv\u文件: csv\u文件。写入('A,NAME,
导入熊猫
打开('test.csv',mode='w')作为csv\u文件:
csv\u文件。写入('A,NAME,B\n')
csv\u文件。写入('a,Peter,Parker,b\n')
df=pandas.read_csv('test.csv',header=0,delimiter=',')
打印(df)
预期产出:
A NAME B
0 a Peter, Parker b
A NAME B PLACE
0 a Peter, Parker b Queens, New York City
实际产量:
A NAME B
a Peter Parker b
A NAME B PLACE
a Peter Parker b Queens New York City
其他例子:
导入熊猫
打开('test.csv',mode='w')作为csv\u文件:
csv\u文件。写入('A,NAME,B,PLACE\n')
csv_文件。写入('a,Peter,Parker,b,Queens,New York City\n')
df=pandas.read_csv('test.csv',header=0,delimiter=',')
打印(df)
预期产出:
A NAME B
0 a Peter, Parker b
A NAME B PLACE
0 a Peter, Parker b Queens, New York City
实际产量:
A NAME B
a Peter Parker b
A NAME B PLACE
a Peter Parker b Queens New York City
不是吗
df = pandas.read_csv('test.csv', header=0, delimiter=',')
df = df.reset_index()
df["NAME"] = df["A"] + ", " + df["NAME"]
df["A"] = df["Unnamed: 0"]
df = df.drop("Unnamed: 0", axis=1)
可能吗?它并没有完全回答这个问题,但可以为您的df提供帮助
编辑:另一种可能性,如果该文件也以.xls/.xlsx格式提供,pd.read\u excel(“name.xls”)
应该可以解决您的问题解决方法:
with open('test.csv', mode='w') as csv_file:
csv_file.write('A,NAME,B\n')
csv_file.write('a, Peter, Parker, b\n')
csv_file.write('aa, John, Lee, Mary, bb\n')
df=pd.DataFrame(columns=["A","NAMES","B"])
with open("test.csv") as ff:
for line in ff:
A,N= line.split(",",maxsplit=1)
N,B= N.rsplit(",",maxsplit=1)
df.loc[len(df.index)]= [A.strip(),N.strip(),B.strip()]
df.drop(0,axis="index")
A NAMES B
1 a Peter, Parker b
2 aa John, Lee, Mary bb
每个
名称
都有这种格式吗?没有。每行中可以存在任意数量的分隔符,但所有行的分隔符都是相同的。好的,有很多方法可以解决这个问题,但这样构造数据是没有意义的。谁制作这样的csv文件?如果您想要一个合适的解决方案,我建议您提供更多涵盖所有可能性的数据。“#在您的示例中,文件头只有3列,但数据有4列”正是问题所在。熊猫希望熊猫足够聪明,能够把“彼得,帕克”作为一个专栏来理解。我编辑了这个问题,以澄清“影响”专栏可以是任何人。甚至不止一个。@aciba规则是什么?必须在列中指定零件号。