【问题标题】:Specify the data type of each column in read_csv from each column of an HTTP header从 HTTP 标头的每一列指定 read_csv 中每一列的数据类型
【发布时间】:2018-05-17 21:36:49
【问题描述】:
project_id = request.data['project']
list_fields = request.POST.getlist('headers')
type_fields = request.POST.getlist('type')

dataframe = pandas.read_csv(file_path, header=0)
                for field in list_fields:
                    for tipo in type_fields:
                        dataframe[field] = dataframe[field].astype(type)

如何根据请求中的过去将每种类型的数据分配给一列?

【问题讨论】:

  • file_pathlist_fields 有何关系?前端,用户为每个字段指定类型,文件独立读取?如果是这样,您可能可以在 list_fieldstype_field 上使用 zip 并迭代该列表。
  • 换句话说,可以在创建 df 时指定类型,但您的 sn-p 不能覆盖整个图片。
  • list_fields 获取 csv 文件头
  • 好的,我想我了解设置。暂时不回家测试,等我回来给我解读。
  • 这是重复的。直接使用pd.read_csv参数dtype which allows a dict mapping <column_name> to <dtype>即可。如果转换容易出错或需要任何转换(例如日期、时间等),则使用参数converters。如果您需要编写自定义转换器函数,请执行此操作。如果您遇到任何特定的编码问题,请发布。

标签: python pandas types http-headers type-inference


【解决方案1】:

当你使用from_csv() 时,pandas 会进行大量的类型推断。事实上,比convert_objects 等其他方法更是如此。我问了一个关于它的问题here,这有点相关。

我假设前端用户必须指定每一列的数据类型。在这种情况下,这是一个简单的情况:

import numpy as np
import pandas as pd

df = pd.DataFrame({'a':[1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]}, 
                   dtype=int)

list_fields = ['a', 'b', 'c']
list_types = [str, int, np.float64]

for field, dtype in zip(list_fields, list_types):
    df[field] = df[field].astype(dtype)

print(df.dtypes)

如果用户不必指定所有字段的 dtype,那么经过进一步思考,我认为这将是一个完全不同的主题,完全取决于您如何过滤/处理用户输入。

【讨论】:

    【解决方案2】:

    您可以从前面传递一个包含您想要定义的所有列的列表,而不是传递另一个包含您想要用于列的所有类型的列表。之后,您可以投射这些循环。

    to_define_list_fields = request.POST.getlist('define')
    
    type_list_fields = request.POST.getlist('types')                  
    
    for dfield in to_define_list_fields:
    
       for type in type_list_fields:
    
           dataframe[dfield] = dataframe[dfield].astype(type)
    

    【讨论】:

    • 在这里嵌套循环是没有意义的。 1 列,1 种类型。为什么有 2 个for 循环?
    • @roganjosh:大概是for dfield, dtype in zip(list_fields, type_fields):
    猜你喜欢
    • 2021-05-19
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多