如何读取 csv 文件并将逗号从数字转换为点?
Posted
技术标签:
【中文标题】如何读取 csv 文件并将逗号从数字转换为点?【英文标题】:How to read a csv file and convert commas from the numbers to dot? 【发布时间】:2021-12-27 23:00:22 【问题描述】:我已经编写了这段代码来读取一个 csv 文件:
for file_to_open in filename:
file_path = os.path.realpath(file_to_open)
path_corrected = file_path.replace("file_mngt", "data")
opened = open(path_corrected)
reader = csv.reader(opened, delimiter = ";")
header = next(reader)
for row in reader:
print(row)
结果是(对于每一行)是这样的:
['8', 'Thorgal', '8,49', '3', '25,47']
我想将每一行中的每个逗号开头转换为一个点。 我在互联网上查看,但他们都说我必须在 csv.reader 中输入“decimal = ','”,但它不起作用。 请帮忙。 谢谢。
【问题讨论】:
我在csv.reader()
文档中没有看到提到decimal
。我想他们在谈论pandas.read_csv()
【参考方案1】:
使用列表推导并在列表的每个元素上调用 replace()
。
print([item.replace(',', '.') for item in row])
【讨论】:
【参考方案2】:如果您打算进一步处理数据,您可以使用 pandas:
import pandas as pd
df = pd.read_csv("your/file/path", delimiter=";", decimal=",")
【讨论】:
【参考方案3】:我只会使用pandas
库。它支持处理 csv 文件的所有基本功能,这使它变得更加容易。
你可以这样做:
import pandas as pd
# read file with comma (,) as decimal separator
df = pd.read_csv(file_to_open, sep=";", decimal=",")
# write to file with dot (.) as decimal separator
df.to_csv("new_output_file.csv", sep=";", decimal=".", index=False)
afaik 默认 csv.reader 不支持逗号小数点/点。您必须添加自己的自定义 map
或转换函数。
【讨论】:
【参考方案4】:看看convtools 库,它提供了大量数据处理原语并在后台生成临时代码:
from convtools import conversion as c
from convtools.contrib.tables import Table
# e.g. without header, returns iterable of lists
rows = (
Table.from_csv(path_corrected, dialect=Table.csv_dialect(delimiter=";"))
# here we apply replace to every table cell
.update_all(c.this().call_method("replace", ",", "."))
.into_iter_rows(list)
)
# with header, returns iterable of dicts
rows = (
Table.from_csv(
path_corrected, header=True, dialect=Table.csv_dialect(delimiter=";")
)
.update_all(c.this().call_method("replace", ",", "."))
.into_iter_rows(dict)
)
【讨论】:
以上是关于如何读取 csv 文件并将逗号从数字转换为点?的主要内容,如果未能解决你的问题,请参考以下文章