Конфигурация контура данных для панд не работает - PullRequest
0 голосов
/ 12 мая 2018

Здесь я пытаюсь объединить кадры данных A и B с C с помощью цикла for.

data = [['Alex',10],['Bob',12],['Clarke',13]]

A = pd.Dataframe(data, columns=['Name','Age'])
B = pd.Dataframe(data, columns=['Name','Age'])
C = pd.Dataframe(data, columns=['Name','Age'])

A.columns  ---> Index(['Name', 'Age'], dtype='object')
B.columns  ---> Index(['Name', 'Age'], dtype='object')
C.columns  ---> Index(['Name', 'Age'], dtype='object')

for df in [A, B]:
    df = pd.concat([df, C], axis=1)

A.columns  ---> Index(['Name', 'Age'], dtype='object')
B.columns  ---> Index(['Name', 'Age'], dtype='object')
df.columns ---> Index(['Name', 'Age', 'Name', 'Age'], dtype='object')

Почему это не объединяет C с исходными кадрами данных A, B.Почему он создает новый df Dataframe?

Я хочу после цикла for:

A.columns ---> Index(['Name', 'Age', 'Name', 'Age'], dtype='object')
B.columns ---> Index(['Name', 'Age', 'Name', 'Age'], dtype='object')

1 Ответ

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

Вы используете сопоставления имен Python для объектов не так, как они работают (вас могут смущать ссылки на другие языки).

Когда вы используете

for df in [A, B]:
    df = pd.concat([df, C], axis=1)

Тогда df справа означает «объект, сопоставленный с именем df» (то есть A затем B).df слева - просто имя df.Поэтому ваш цикл вообще не изменяет исходные объекты.


Вы можете использовать

A, B = pd.concat([A, C], axis=1), pd.concat([B, C], axis=1)

Если вы действительно должны использовать цикл, вы можете использовать dict.Сначала поместите объект туда,

dfs = {'A': A, 'B': B}

, затем обратитесь к ним только через dict:

for k, v in dfs.items():
    dfs[k] = pd.concat([v, C], axis=1)
...