2016-12-11 3 views
2

Есть два DataFrames, которые я хочу объединить:Панды сливаться, как избежать неназванный столбец

DataFrame A columns: index, userid, locale (2000 rows) 
DataFrame B columns: index, userid, age  (300 rows) 

Когда я выполнить следующее:

pd.merge(A, B, on='userid', how='outer') 

Я получил DataFrame со следующими столбцами:

индекс, Безымянный: 0, идентификатор пользователя, языковой стандарт, возраст

index цв umn и столбец Unnamed:0 идентичны. Я думаю, что столбец Unnamed:0 является столбцом индекса DataFrame B.

Мой вопрос: есть ли способ избежать этого столбца Unnamed при слиянии двух DF?

После этого я могу удалить столбец Unnamed, но просто интересно, есть ли лучший способ сделать это.

+2

Вы пробовали установить index = False? Здесь есть хорошая дискуссия: http://stackoverflow.com/questions/36519086/pandas-how-to-get-rid-of-unnamed-column-in-a-dataframe – datawrestler

+1

@datawrestler merge не имеет индекс.(to_csv имеет его, но не объединяется) – Cheng

+0

Правильно, но если вы установите флаг при чтении в каждом DF, а затем слейте его, то можете сделать это – datawrestler

ответ

1

Итак, что вы делаете, это сохранение индекса в файл, а когда вы читаете назад из файла, столбец, ранее сохраненный как index, загружается как правильный колонка.

Есть несколько способов справиться с этим:

Метод 1

При сохранении pandas.DataFrame на диск, используйте index=False так:

df.to_csv(path, index=False) 

Метод 2

При чтении из файла вы c определить столбец, который будет использоваться в качестве индекса, например:

df = pd.read_csv(path, index_col='index') 

Метод 3

Если метод # 2 не подходит вам по какой-то причине, вы всегда можете установить столбец быть используется в качестве индекса в дальнейшем, как это:

df.set_index('index', inplace=True) 

После этого момента, ваш datafame должен выглядеть следующим образом:

 userid locale age 
index 
    0 A1092  EN-US  31 
    1 B9032  SV-SE  23 

Надеюсь, это поможет.

3

Либо не писать индекс при сохранении DataFrame в CSV файл (df.to_csv('...', index=False)) или, если вам приходится иметь дело с CSV-файлов, которые вы не можете изменить/редактировать, использовать usecols параметр:

A = pd.read_csv('/path/to/fileA.csv', usecols=['userid','locale']) 

в чтобы избавиться от столбца Unnamed:0 ...

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