Конкатенация фреймов данных Pandas, получение значений Nan для первого фрейма данных - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь объединить два кадра данных. 'df' - это мой начальный фрейм данных, содержащий всю необходимую мне информацию заголовка. 'row' - это моя первая строка данных, которую я хочу добавить к 'df'.

df =
   FName E1         E2          E3          E4          E5          E6
0  Nan   2          2           2           2           2           2
1  Nan   1          1           1           1           1           1
2  Nan   3          4           5           6           7           8
3  Nan   4          5           6           7           8           10
4  Nan   1002003004 1002004005  1002005006  1002006007  1002007008  1002008010


row =
   0                                        1       2       3       4       5       6
0  501#_ZMB_2019-04-03_070528_reciprocals   30.0193 30.0193 30.0193 34.8858 34.8858 34.8858

Я пытаюсь создать это:

   FName                                    E1          E2          E3          E4          E5          E6
0  Nan                                      2           2           2           2           2           2
1  Nan                                      1           1           1           1           1           1
2  Nan                                      3           4           5           6           7           8
3  Nan                                      4           5           6           7           8           10
4  Nan                                      1002003004  1002004005  1002005006  1002006007  1002007008  1002008010
5  501#_ZMB_2019-04-03_070528_reciprocals   30.0193     30.0193     30.0193     34.8858     34.8858     34.8858

Я пробовал следующее:

df = df.append(row, ignore_index=True)

и

df = pd.concat([df, row], ignore_index=True)

Оба эти фактора приводят к потере всех данных в первом df, который должен содержать всю информацию заголовка.

   0                                        1       2       3       4       5       6
0  Nan                                      Nan     Nan     Nan     Nan     Nan     Nan
1  Nan                                      Nan     Nan     Nan     Nan     Nan     Nan
2  Nan                                      Nan     Nan     Nan     Nan     Nan     Nan
3  Nan                                      Nan     Nan     Nan     Nan     Nan     Nan
4  Nan                                      Nan     Nan     Nan     Nan     Nan     Nan
5  501#_ZMB_2019-04-03_070528_reciprocals   30.0193 30.0193 30.0193 34.8858 34.8858 34.8858

Я также пытался

df = pd.concat([df.reset_index(drop=True, inplace=True), row.reset_index(drop=True, inplace=True)])

, который произвел следующую трассировку

Traceback (most recent call last):

  File "<ipython-input-146-3c1ecbd1987c>", line 1, in <module>
    df = pd.concat([df.reset_index(drop=True, inplace=True), row.reset_index(drop=True, inplace=True)])

  File "C:\Users\russells\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\reshape\concat.py", line 228, in concat
    copy=copy, sort=sort)

  File "C:\Users\russells\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\reshape\concat.py", line 280, in __init__
    raise ValueError('All objects passed were None')

ValueError: All objects passed were None

Кто-нибудь знает, что я делаю неправильно?

1 Ответ

1 голос
/ 28 октября 2019

Когда вы объединяете дополнительные строки, pandas выравнивает столбцы, которые в настоящее время не перекрываются. rename выполнит работу:

pd.concat([df, row.rename(columns=dict(zip(row.columns, df.columns)))],
           ignore_index=True)

                                    FName          E1          E2          E3          E4          E5          E6
0                                     Nan           2           2           2           2           2           2
1                                     Nan           1           1           1           1           1           1
2                                     Nan           3           4           5           6           7           8
3                                     Nan           4           5           6           7           8          10
4                                     Nan  1002003004  1002004005  1002005006  1002006007  1002007008  1002008010
5  501#_ZMB_2019-04-03_070528_reciprocals     30.0193     30.0193     30.0193     34.8858     34.8858     34.8858

Или, если вам просто нужно назначить одну строку в конце, и у вас есть RangeIndex на df:

df.loc[df.shape[0], :] = row.to_numpy()
...