Укажите тип данных каждого столбца в read_csv из каждого столбца заголовка HTTP. - PullRequest
0 голосов
/ 18 мая 2018
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)

как я могу назначить каждый тип данных столбцу в соответствии с прошлым в запросе?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Когда вы используете from_csv(), панды будут делать очень много выводов типа.На самом деле, больше, чем другие методы, такие как convert_objects.Я задал вопрос об этом here, что в некоторой степени связано.

Я предполагаю, что пользователь переднего плана должен указать тип d для каждого столбца.В этом случае это простой случай:

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 всех полей, то, если подумать, я думаю, что это будет совсем другая темао том, как вы фильтруете / обрабатываете пользовательский ввод.

0 голосов
/ 18 мая 2018

Вы можете передать список спереди со всеми столбцами, которые вы хотите определить, а затем передать другой список со всеми типами, которые вы хотите для столбцов.После этого вы можете разыграть эти петли.

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)
...