如何读取Python/Pandas中的.csv文件,其中逗号(,)是分隔符,并显示在列名中?
我有一个如下所示的.csv文件,其中一些列名中也有逗号如何读取Python/Pandas中的.csv文件,其中逗号(,)是分隔符,并显示在列名中?,python,pandas,csv,Python,Pandas,Csv,我有一个如下所示的.csv文件,其中一些列名中也有逗号 #NAME,DATE,RECORDS,QUANTITY Johb.W. Smith, LLC,03/01/2018 to 03/29/2018,728,32309.77 XXX Industrial Ltd, Inc.,07/27/2017 to 07/28/2017,2,312.00 XYSC,03/02/2018 to 03/29/2018,387,4468.50 当我尝试在Python/Panda中阅读时,其中有逗号的列正在移动(因
#NAME,DATE,RECORDS,QUANTITY
Johb.W. Smith, LLC,03/01/2018 to 03/29/2018,728,32309.77
XXX Industrial Ltd, Inc.,07/27/2017 to 07/28/2017,2,312.00
XYSC,03/02/2018 to 03/29/2018,387,4468.50
当我尝试在Python/Panda中阅读时,其中有逗号的列正在移动(因为系统将其视为新行值,而实际上不是)
例如:约翰·W·华盛顿州第一排。Smith LLC是一个完整的名称(实际上在原始csv文件中用逗号分隔,因此在panda中被视为一个新的单元格值)
有人能建议如何摆脱这个问题吗?实际输出应如下所示:
#NAME DATE RECORDS
Johb.W. Smith LLC 03/01/2018 to 03/29/2018 728
XXX Industrial Ltd Inc. 07/27/2017 to 07/28/2017 2
XYSC 03/02/2018 to 03/29/2018 387
csv
中存在问题,因为如果分隔符为,
且某些值包含,
显然会添加对有效csv值的引用:
若问题值仅出现在第一列或最后一列中,则下面的解决方案并非通用
通过分隔符创建一列数据框
,该分隔符不在数据中,如|,并使用参数n
按列数-1
,此处按3
:
import pandas as pd
temp=u"""#NAME,DATE,RECORDS,QUANTITY
Johb.W. Smith, LLC,03/01/2018 to 03/29/2018,728,32309.77
XXX Industrial Ltd, Inc.,07/27/2017 to 07/28/2017,2,312.00
XYSC,03/02/2018 to 03/29/2018,387,4468.50"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep="|")
df1 = df.iloc[:, 0].str.rsplit(',', n=3, expand=True)
df1.columns = df.columns.str.split(',')[0]
print (df1)
#NAME DATE RECORDS QUANTITY
0 Johb.W. Smith, LLC 03/01/2018 to 03/29/2018 728 32309.77
1 XXX Industrial Ltd, Inc. 07/27/2017 to 07/28/2017 2 312.00
2 XYSC 03/02/2018 to 03/29/2018 387 4468.50
手动输入数据或编辑文件以更正数据
可以使用正则表达式或其他模式匹配进行英勇的尝试,以猜测值应在何处分开,但这些尝试在所有情况下都不起作用,并且可能会意外失败
如果有人向您承诺提供csv文件,请拒绝此文件,并友好地要求他们提供格式正确的csv文件。您首先创建了csv吗?在一列中可能有逗号,因此我怀疑CSV是如何创建的。如果是这样的话,如果可以的话,可以更容易地解决这个问题。我不能触摸.csv文件。这就是要求的方式。..rsplit(n=3)依赖于最后三列不包含伪逗号,这适用于此数据集。@Jasen-确切地说,我尝试在回答中解释它。代码运行良好,我希望逗号只放在第一列中。非常感谢。你能不能请这一部分更详细一点-“按rsplit拆分(拆分),参数n按列数-1,这里是3:“拆分是如何发生的?rsplit
意味着它从右侧拆分前n个分隔符,所以在你的示例中,按3的拆分后,
将停止拆分,并创建4列
import pandas as pd
temp=u"""#NAME,DATE,RECORDS,QUANTITY
Johb.W. Smith, LLC,03/01/2018 to 03/29/2018,728,32309.77
XXX Industrial Ltd, Inc.,07/27/2017 to 07/28/2017,2,312.00
XYSC,03/02/2018 to 03/29/2018,387,4468.50"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep="|")
df1 = df.iloc[:, 0].str.rsplit(',', n=3, expand=True)
df1.columns = df.columns.str.split(',')[0]
print (df1)
#NAME DATE RECORDS QUANTITY
0 Johb.W. Smith, LLC 03/01/2018 to 03/29/2018 728 32309.77
1 XXX Industrial Ltd, Inc. 07/27/2017 to 07/28/2017 2 312.00
2 XYSC 03/02/2018 to 03/29/2018 387 4468.50