bir*_*era 0 python csv decimal
所以我有一个包含一堆数字和单词的 CSV 文件,我需要将数字截断到小数点后三位,但到目前为止我尝试过的所有内容都不起作用,因为字符串:我收到一条错误消息说'无法将字符串转换为浮点数'。
我使用了这里建议的代码:format to 3 decimal places all decimal numbers in csv file python
并得到了那个错误。
代码看起来像(假设所有缩进都是正确的):
with open('metaanalysis_data.csv', 'rb') as f_input,
open('metaanalysis_datas.csv', 'wb') as f_output:
csv_input = csv.reader(f_input, quotechar="'")
csv_output = csv.writer(f_output)
csv_output.writerow(next(csv_input))
for cols in csv_input:
for i in cols:
for i in xrange(1, 10):
#if i != str:
cols[i] = '{:.3f}'.format(float(cols[i]))
csv_output.writerow(cols)
Run Code Online (Sandbox Code Playgroud)
我尝试添加:
if i is float:
Run Code Online (Sandbox Code Playgroud)
在 'for i in xrange(1, 10)' 之前,我尝试了同样的事情,它清除了我的错误消息,但导致文件根本没有被修改。
请帮忙!谢谢!
小智 5
在 Python 中使用 Pandas,你应该能够像这样完成这项工作:
# load pandas package
import pandas as pd
# read in initial file
dataset = pd.read_csv('metaanalysis_data.csv')
# create function that tries to round input to three decimal places,
# returns input if failure occurs (e.g. if not a float)
def try_cutoff(x):
try:
return round(float(x), 3)
except Exception:
return x
# loop over each column and apply try_cutoff to each element in each column
for field in dataset.columns:
dataset[field] = dataset[field].map(try_cutoff)
# write new dataset result to CSV file
dataset.to_csv("some_new_file.csv", index = False)
Run Code Online (Sandbox Code Playgroud)
因此,这实际上创建了一个函数 try_cutoff,它将尝试将元素四舍五入到小数点后三位。如果它命中一个字符串,那么它只会返回该字符串。然后,对数据框中的每一列运行此操作,并将新数据框写入文件。
请让我知道这是否适合您。