如何读取 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 文件并将逗号从数字转换为点?的主要内容,如果未能解决你的问题,请参考以下文章

打开CSV格式文件时的数字自动转换和乱码问题~~~~急

当某些数字包含逗号作为千位分隔符时如何读取数据?

如何从 CSV 文件中获取数据,并将数据解析为两个逗号之间的 INT?

仅从csv文件c#中读取特定列[重复]

使用 C# 在 XML 文件中转换 CSV

将从excel读取的科学数字转换为csv