2015-06-22 1 views
0

WinPython: панд 0.16.1, py3.4Столбцы имя сброшенной на Append в панд

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 
        'B': ['B0', 'B1', 'B2', 'B3'], 
        'C': ['C0', 'C1', 'C2', 'C3'], 
        'D': ['D0', 'D1', 'D2', 'D3']}, 
        index=[0, 1, 2, 3]) 
df1.columns.names=["hello"] 
df1 
hello A B C D 
0  A0 B0 C0 D0 
1  A1 B1 C1 D1 
2  A2 B2 C2 D2 
3  A3 B3 C3 D3 
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'], 
        'D': ['D2', 'D3', 'D6', 'D7'], 
        'F': ['F2', 'F3', 'F6', 'F7']}, 
        index=[2, 3, 6, 7]) 
df4.columns.names=["hello"] 
df4 
hello B D F 
2  B2 D2 F2 
3  B3 D3 F3 
6  B6 D6 F6 
7  B7 D7 F7 

мне нужно присоединиться к dataframes, подобные показанным выше, но столбцы называют hello (это не столбец в нем может показаться!) отбрасывается при добавлении операции. Зачем? Я должен заставить его так: pv.columns.names = df4.columns.names

df1.append(df4) 
    A B C D F 
0 A0 B0 C0 D0 NaN 
1 A1 B1 C1 D1 NaN 
2 A2 B2 C2 D2 NaN 
3 A3 B3 C3 D3 NaN 
2 NaN B2 NaN D2 F2 
3 NaN B3 NaN D3 F3 
6 NaN B6 NaN D6 F6 
7 NaN B7 NaN D7 F7 

UPD: concat/append капли оси 0/1 имена, когда они отличаются. Итак, я думаю, форсирование .names после append - лучшее решение сейчас.

+0

Не могли бы вы принять мой ответ, если мой подход поможет вам решить проблему? Большое спасибо. :) –

ответ

-1

Я получаю (64 бит Anaconda (Windows), Python 3.4, панды 0.16.1):

df1.append(df4) 
Out[190]: 
    A B C D F hello 
0 A0 B0 C0 D0 NaN  0 
1 A1 B1 C1 D1 NaN  1 
2 A2 B2 C2 D2 NaN  2 
3 A3 B3 C3 D3 NaN  3 
0 NaN B2 NaN D2 F2  2 
1 NaN B3 NaN D3 F3  3 
2 NaN B6 NaN D6 F6  6 
3 NaN B7 NaN D7 F7  7 
+0

no-no, 'hello' не является столбцом:' df1.columns.names = ["hello"] '. (Образцы данных относятся к http://pandas.pydata.org/pandas-docs/stable/merging.html) – Winand

+0

oh, почему вы хотите, чтобы ваши столбцы имели такое имя? Я никогда раньше не видел эту функцию, возможно, вы можете достичь того, что хотите другим способом? – maxymoo

+0

, когда мы делаем столбцы dataframe.T', становимся индексом, и я могу их несколько раз менять и массивно использовать MultiIndex, мне нужно сохранить имена уровней индекса. – Winand

1

DataFrame.append method не так хорошо, как pandas.concat function для этой цели.

Используя pandas.concat function, вы сохраните указатель.

pd.concat([df1,df2]) 
     A  B C  D F 
hello     
0  A0  B0 C0  D0 NaN 
1  A1  B1 C1  D1 NaN 
2  A2  B2 C2  D2 NaN 
3  A3  B3 C3  D3 NaN 
2  NaN  B2 NaN  D2 F2 
3  NaN  B3 NaN  D3 F3 
6  NaN  B6 NaN  D6 F6 
7  NaN  B7 NaN  D7 F7 
+0

'hello' - это название уровня столбцов [A, B, C, D, F]! Я обновил вопрос, чтобы быть более четким. – Winand

+0

Хорошо, это было не очень очевидно из ваших вставленных примеров. Я уточню свой ответ. – firelynx

0

Я думаю, pd.DataFrame.combine_first() поможет.

df1.combine_first(df4) 
Out[98]: 
hello A B C D F 
0  A0 B0 C0 D0 NaN 
1  A1 B1 C1 D1 NaN 
2  A2 B2 C2 D2 F2 
3  A3 B3 C3 D3 F3 
6  NaN B6 NaN D6 F6 
7  NaN B7 NaN D7 F7 

Он похож на df1.update(df4), но с помощью «внешних» присоединиться способ для невидимых записей в df1.

Смежные вопросы