Python 如何读取带有熊猫的csv文件,在标题中的行中包含更多分隔符?

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,

我想从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,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规则是什么?必须在列中指定零件号。