【问题标题】:How to read a csv file and convert commas from the numbers to dot?如何读取 csv 文件并将逗号从数字转换为点?
【发布时间】: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()

标签: python python-3.x database list 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)
        )
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-07
          • 1970-01-01
          • 1970-01-01
          • 2015-01-25
          • 2023-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多