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)
如何根据请求中的过去将每种类型的数据分配给列?
答案 0 :(得分:0)
您可以从前面传递包含您要定义的所有列的列表,而不是传递包含列所需的所有类型的另一个列表。之后,您可以投射这些循环。
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 :(得分:0)
当你使用from_csv()
时,pandas会进行大量的类型推断。事实上,比convert_objects
等其他方法更为重要。我问了一个关于它的问题here
,这有点相关。
我假设前端用户必须指定每列的dtype。在这种情况下,这是一个简单的例子:
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,那么,进一步考虑,我认为这将完全取决于您如何过滤/处理用户输入。