Python 如何从CSV文件导入数据类型列表?

Python 如何从CSV文件导入数据类型列表?,python,pandas,csv,dtype,Python,Pandas,Csv,Dtype,由于数据初始格式的性质,在从csv文件导入数据类型后,我会分配这些数据类型,并且当前有一个数据类型数组,我在浏览每个csv文件时会分配这些数据类型 例如: dtypes = [{"ID": str, "Place": str, "Speed":float, "Major Street": str}, {"ID": str, "Place": str, "Speed":float, "Roy's Boulevard": str}, {"ID": str, "

由于数据初始格式的性质,在从csv文件导入数据类型后,我会分配这些数据类型,并且当前有一个数据类型数组,我在浏览每个csv文件时会分配这些数据类型

例如:

dtypes = [{"ID": str, "Place": str, "Speed":float, "Major Street": str},
          {"ID": str, "Place": str, "Speed":float, "Roy's Boulevard": str},
          {"ID": str, "Place": str, "Speed":float, "Cassandra Park": str}]
我更喜欢将这个数组放在另一个文件中,这样以后就不会用一个巨大的数组把代码弄得乱七八糟了。我应该将其保存在单独导入的python文件中,还是有办法从csv中拆分/剥离

每个csv的外观示例如下:

显示我试图使用此词典实现的功能的附加代码:

  for n in tq(range(4)):
      df = pd.read_csv(r'S:\Energy\'+ meterfile[n] + '.csv', parse_dates=[['Date', 'Time']], skiprows=[1], usecols=dictionary[n])
              first_nan = df[df.Date_Time == 'nan nan'].first_valid_index()
              df = df[:first_nan]
              df.fillna(0)
              df = df.astype(dtypes[n])




              df.to_csv(r'S:\Energy\Database Progress\CleanedWorksheets\\' +
              meterfile[n] + '.csv', index=False)
选项:

1默认情况下读取CSV,然后修复数据类型 i、 e不指定数据类型,它们将默认为字符串。然后修复后面的非字符串列(示例中只有
'Speed':float

或:

2通过编程提前确定每列的数据类型 在读取时为每列指定数据类型:
pd.read\u csv(…dtype={…}…
,作为
'name':dtype
的命令。这需要您事先知道列名(或者使用正则表达式根据名称分配数据类型)。为了以编程方式实现这一点,您可能必须首先读取每个CSV文件的头行,并将其映射到数据类型

如果要以编程方式读取每个CSV文件的标题行并将其映射到数据类型:

import glob

for f in glob.glob('*.csv'):
    # First, read header row, to infer dtypes
    df = pd.read_csv(f, header=[0])
    #print(df.columns)
    # Here you can process df.columns, add it into a dtype_dict, whatever

    # Second, reread entire file
    df = pd.read_csv(f, dtype=...)

老实说,这要看情况而定,做1)可能比做2)更少悲伤。只需阅读中的所有内容,调整您的数据类型说明符,然后再次运行它。如果您正在调试此文件,只需阅读say
nrow=100

我不明白您在做什么:“当前有一个数据类型数组,我在查看每个csv文件时分配这些数据类型”您的意思是以编程方式分配代码中的数据类型吗?但是您的代码看起来是错误的,您只需要为每个列分配一次数据类型。不是针对每一行和每一列。如果您发布实际CSV文件和代码的片段,那就更好了。对,因此我导入了CSV,它会自动将元素分配给对象数据类型,因为数据最初的格式不同。导入后我会清理它,以便可以为每个元素重新分配正确的数据类型。这将循环通过多个CSV,其中大部分是唯一的列(本例中的ID、位置和速度除外)。我看到了我试图为每一行分配数据的样子,但我所做的是将其分配给列,然后在进入下一行之前将df导出为csv。我想问的是,如何从文件中导入数据类型?在问题中发布实际的CSV文件和代码。(). 然后我们可以回答你。根据要求,我编辑了我的问题,以澄清问题。您的第一个要点基本上就是我正在做的,接受默认值并在事实发生后进行更改,但我希望从文件中批量执行。同样,我知道如何更改/分配数据类型,因为我已经这样做了,但我在粘贴箱中发布的csv示例仅为94个示例中的1个,我更希望将我的数据类型保存在单独的文件中。
import glob

for f in glob.glob('*.csv'):
    # First, read header row, to infer dtypes
    df = pd.read_csv(f, header=[0])
    #print(df.columns)
    # Here you can process df.columns, add it into a dtype_dict, whatever

    # Second, reread entire file
    df = pd.read_csv(f, dtype=...)