Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何读取Python/Pandas中的.csv文件,其中逗号(,)是分隔符,并显示在列名中?_Python_Pandas_Csv - Fatal编程技术网

如何读取Python/Pandas中的.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中阅读时,其中有逗号的列正在移动(因

我有一个如下所示的.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中阅读时,其中有逗号的列正在移动(因为系统将其视为新行值,而实际上不是)

例如:约翰·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