Python 3.x 如何在python(pandas)中导出包含带有千运算符的数字的CSV文件?
我有这个Python 3.x 如何在python(pandas)中导出包含带有千运算符的数字的CSV文件?,python-3.x,pandas,csv,export-to-csv,Python 3.x,Pandas,Csv,Export To Csv,我有这个数字.csv: Title/BOLA;“总数/1333.903” 我在上面运行这段代码: df1 = pd.read_csv("numbers.csv", sep=";",header=None) print(df1) df1 = df1.stack().str.split('\s*/\s*', expand=True) df1 = df1.reset_index(level=1, drop=True).set_index(0, append=True)[1].unstack() d
数字.csv
:
Title/BOLA;“总数/1333.903”代码>
我在上面运行这段代码:
df1 = pd.read_csv("numbers.csv", sep=";",header=None)
print(df1)
df1 = df1.stack().str.split('\s*/\s*', expand=True)
df1 = df1.reset_index(level=1, drop=True).set_index(0, append=True)[1].unstack()
df1.to_csv("test.csv")
df1 = df1.stack().str.split('\s*/\s*', expand=True)
df1 = df1.reset_index(level=1, drop=True).set_index(0, append=True)[1].unstack()
df1.to_csv("final_csv.csv")
打印(df1)
返回:
0 1 2
0 Title/BOLA Total/1,333.903 NaN
当我保存到final_csv.csv
时,编号1349.098
变为1
。我想改为保存号码1349.098
。您能帮助我吗?看起来您正在以字符串的形式读取第1列,然后以字符串的形式将其写回。这意味着它将继续向前推进逗号。在to_csv(“test.csv”)
中,您没有指定分隔符,因此默认为逗号。我假设349.098会出现在下一个专栏中。您可以通过在df1.to_csv(“test.csv”,sep=';”)
中指定分隔符来解决此问题,但请确保您的代码正在执行您认为它首先要执行的操作。看起来您正在将列1作为字符串读取,然后将其作为字符串写回。这意味着它将继续向前推进逗号。在to_csv(“test.csv”)
中,您没有指定分隔符,因此默认为逗号。我假设349.098会出现在下一个专栏中。您可以通过在df1.to_csv(“test.csv”,sep=';”)
中指定分隔符来解决此问题,但请确保您的代码正在执行您认为它首先要执行的操作。在读取csv数据时尝试使用数千=',
标志。见param's
CSV输出:
Title,Total
BOLA,"1,333.903"
读取csv数据时,请尝试使用数千=','
标志。见param's
CSV输出:
Title,Total
BOLA,"1,333.903"
在写入和读回期间,必须引用数字字段,因为它包含“,”分隔符:
pandas.to_csv(..., quoting=1) # for QUOTE_ALL
pandas.to_csv(..., quoting=0) # for QUOTE_MINIMAL
pandas.read_csv(..., quoting=...) # ditto
请参阅文档页面中的“引用部分”,在写回和读回时必须引用数字字段,因为它包含“,”分隔符:
pandas.to_csv(..., quoting=1) # for QUOTE_ALL
pandas.to_csv(..., quoting=0) # for QUOTE_MINIMAL
pandas.read_csv(..., quoting=...) # ditto
当代码第4行后面有此数据框时,请参见文档页面中的“报价部分”:
df1 = df1.reset_index(level=1, drop=True).set_index(0, append=True)[1].unstack()
print(df1)
Title Total
0 BOLA 1,333.903
然后可以删除逗号并将字符串转换为浮点:
df1['Total'] = df1['Total'].str.replace(',', '').astype(float)
结果如下:
Title Total
0 BOLA 1333.903
当代码第4行之后有此数据帧时:
df1 = df1.reset_index(level=1, drop=True).set_index(0, append=True)[1].unstack()
print(df1)
Title Total
0 BOLA 1,333.903
然后可以删除逗号并将字符串转换为浮点:
df1['Total'] = df1['Total'].str.replace(',', '').astype(float)
结果如下:
Title Total
0 BOLA 1333.903
这将解决我前面提到的问题,可能会满足提问者的真正需求,但却没有提出要求。(你是高谭市需要的英雄。)请看这里的工作演示:让我知道你想要还是不想要?@好奇的是,问题是当我打开CSV时,它只显示1
,因为它将逗号解释为断路器。这就是为什么我想输出:BOLA,“1333.903”
。我添加了完整的代码。这将解决我前面提到的问题,并且可能会满足询问者的真正需求,但没有要求。(你是高谭市需要的英雄。)请看这里的工作演示:让我知道你想要还是不想要?@好奇的是,问题是当我打开CSV时,它只显示1
,因为它将逗号解释为断路器。这就是为什么我想输出:BOLA,“1333.903”
。我添加了完整的代码。很抱歉,我没有得到指定df1.to_csv(“test.csv”,sep=';”)
的位置,它将取代您的df1.to_csv(“test.csv”)
行。很抱歉,我没有得到指定df1.to_csv(“test.csv”,sep=';”)
的位置,它将取代您的df1.to_csv(“test.csv”)
line。答案看起来应该有用。代码第3行和第4行中的字符串操作的目的是什么?这个问题可能是一个意外的结果,而不是熊猫的问题。答案看起来应该是可行的。代码第3行和第4行中的字符串操作的目的是什么?问题可能是意外的结果,而不是熊猫的问题。它返回TypeError:“quoting”必须是整数
Fixed。正如docpages所说,pandas使用整数代码进行引用:quoting=QUOTE_MINIMAL(0)、QUOTE_ALL(1)、QUOTE_NONNUMERIC(2)或QUOTE_NONE(3)
,而Python内置的csv模块使用那些常量名csv.QUOTE_MINIMAL
等。它返回类型错误:“quoting”必须是整数。正如docpages所说,pandas使用整数代码进行引用:quoting=QUOTE_MINIMAL(0)、QUOTE_ALL(1)、QUOTE_NONNUMERIC(2)或QUOTE_NONE(3)
,而Python内置的csv模块使用这些常量名csv.QUOTE_MINIMAL
等。