Слияние двух CSV-файлов на ключе в столбце 1 - PullRequest
0 голосов
/ 11 июля 2019

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

Я перепробовал множество вариантов, но продолжаю получать сообщения об ошибках с жалобами. Хотя в стеке потока много примеров, ни один из них не дает ответов об используемой методологии.

Файлы имеют заголовки с заголовком первого столбца = «Код», а поле ключа на самом деле состоит из 5 цифр. Я не уверен, вызывает ли это у меня проблемы.

df1 = pd.read_csv('file1.csv', header=[0], index_col=['Code'])
df2 = pd.read_csv('file2.csv', header=[0], index_col=['Code'])

и я попробовал

df1 = pd.read_csv('file1.csv', header=[0])
df2 = pd.read_csv('file2.csv', header=[0])

Я пробовал варианты ...

dfx = pd.merge(df1, df2, left_on=['Code'], right_on=['Code'], how='outer')
dfx = df1[['Code','A-Score']].merge(df2[['Code','B-Score']], how='outer')
df1.merge(df2, on=['Code'], how='outer')
df  = pd.merge(df1[['Code', 'Field1', 'Field2']], df2['Code', 'Field3', 'Field4'], on='Code', how='outer', suffixes=('-A','-B'))
dfx = pd.concat([df1,df2], axis=1, join='outer')

Я хочу, чтобы все строки из обоих файлов были объединены в один файл. В обоих файлах нет повторяющихся ключей.

Так что я просто хочу выполнить довольно простое объединение двух файлов и понять, какие параметры требуются и где / почему.

Postedit: Моя проблема в том, что ключ интерпретируется как числовой, поскольку я могу объединить строковый ключ Таким образом,

Как мне 1. Переопределить ключ как строковый, а не числовой? 2. Как мне указать ключ как int64?

1 Ответ

1 голос
/ 11 июля 2019

У меня работает следующее.

$ cat a.csv
Code,Field1,Field2
1,10,100
2,20,200
3,30,300
5,50,500

$ cat b.csv
Code,Field3
1,11
2,21
4,41
>>> df1 = pd.read_csv('a.csv', header=0, index_col='Code')
>>> df1
      Field1  Field2
Code
1         10     100
2         20     200
3         30     300
5         50     500

>>> df2 = pd.read_csv('b.csv', header=0, index_col='Code')
      Field3
Code
1         11
2         21
4         41
>>> df1.merge(df2, how='outer', on='Code')
      Field1  Field2  Field3
Code
1       10.0   100.0    11.0
2       20.0   200.0    21.0
3       30.0   300.0     NaN
5       50.0   500.0     NaN
4        NaN     NaN    41.0

Обновление: За комментарий @ OP, без index_col и Code в виде числового столбца:

>>> df1 = pd.read_csv('a.csv', header=[0])
>>> df1
   Code  Field1  Field2
0     1      10     100
1     2      20     200
2     3      30     300
3     5      50     500
>>> df1.dtypes
Code      int64
Field1    int64
Field2    int64
dtype: object

>>> df2 = pd.read_csv('b.csv', header=[0])
>>> df2
   Code  Field3
0     1      11
1     2      21
2     4      41
>>> df2.dtypes
Code      int64
Field3    int64
dtype: object

pd.merge(df1, df2, on='Code', how='outer')
Out[266]:
   Code  Field1  Field2  Field3
0     1    10.0   100.0    11.0
1     2    20.0   200.0    21.0
2     3    30.0   300.0     NaN
3     5    50.0   500.0     NaN
4     4     NaN     NaN    41.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...