Python: итеративно добавить в dataframe - PullRequest
0 голосов
/ 19 мая 2018

У меня есть следующий код:

for state in state_list:
    state_df = pd.DataFrame()
    for df in pd.read_csv(tax_sample,sep='\|\|', engine='python', dtype = tax_column_types, chunksize = 10, nrows = 100):
        state_df = pd.concat(state_df,df[df['state'] == state])
state_df.to_csv('property' + state + '.csv')

Мой набор данных довольно большой, и я разбиваю его на куски (на самом деле это будет больше, чем 10 объектов).Я беру каждый кусок и проверяю, соответствует ли состояние определенному состоянию в списке, и, если это так, сохраняю его в кадре данных и сохраняю его вниз.Короче говоря, я пытаюсь взять фрейм данных со многими различными состояниями и разбить его на несколько фреймов, каждый из которых имеет только одно состояние и сохранить в CSV.

однако приведенный выше код выдает ошибку:

TypeError: первый аргумент должен быть итеративным из объектов pandas, вы передали объект типа "DataFrame"

Есть идеи почему?

Спасибо,

Майк

1 Ответ

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

Рассмотрим итерацию фрагментов и каждый раз запуска .isin[] для фильтра на state_list , но сохраняйте в контейнере, таком как dict или list.Как уже было сказано, избегайте накладных расходов на расширение фреймов данных в цикле.

После этого свяжите с pd.concat для контейнера и затем запустите зацикленное поле groupby в состояние , чтобы вывести каждый файл по отдельности,

df_list = []

reader = pd.read_csv(tax_sample, sep='\|\|', engine='python', 
                     dtype=tax_column_types, chunksize=10, nrows=100)

for chunk in reader:
   tmp = chunk[chunk['state'].isin(state_list)]    
   df_list.append(tmp)

master_df = pd.concat(df_list)

for g in master_df.groupby('state'):
    g[1].to_csv('property' + g[0] + '.csv')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...