Как добавить значения одного меньшего DataFrame в часть другого DataFrame смешанного типа, но только в строки после некоторого произвольного индекса строки? - PullRequest
0 голосов
/ 03 августа 2020

У меня есть два файла .csv, один из которых может быть описан как заголовок и тело. Заголовок содержит такие данные, как общее количество строк, дату и время, какое приложение сгенерировало данные и с какой строки начинается тело. Второй файл содержит одну строку.

>>> import pandas as pd
>>> df = pd.read_csv("data.csv", names=list('abcdef'))
>>> df
                 a           b    c    d    e    f
0   data start row           5  NaN  NaN  NaN  NaN
1        row count           7  NaN  NaN  NaN  NaN
2          made by     foo.exe  NaN  NaN  NaN  NaN
3             date  01-01-2000  NaN  NaN  NaN  NaN
4                a           b    c    d    e    f
5              0.0         1.0  2.0  3.0  4.0  5.0
6              0.0         1.0  2.0  3.0  4.0  5.0
7              0.0         1.0  2.0  3.0  4.0  5.0
8              0.0         1.0  2.0  3.0  4.0  5.0
9              0.0         1.0  2.0  3.0  4.0  5.0
10             0.0         1.0  2.0  3.0  4.0  5.0
11             0.0         1.0  2.0  3.0  4.0  5.0
>>> df2 = pd.read_csv("extra_data.csv")
>>> df2
     a    b    c
0  6.0  5.0  4.0
>>> row = df2.loc[0]
>>>

У меня возникли проблемы с изменением столбцов 'a', 'b' и 'c', а затем с сохранением DataFrame в новый файл .csv.

Я попытался добавить строку путем нарезки и оператора сложения, но это не сработало:

>>> df[5:,'a':'c'] += row

TypeError: '(slice(5, None, None), slice('a', 'c', None))' is an invalid key
>>>

Я также попробовал найти ответ, который нашел здесь , но это дало аналогичную ошибку:

>>> df[5:,row.index] += row

TypeError: '(slice(5, None, None), Index(['a', 'b', 'c'], dtype='object'))' is an invalid key
>>>

Я подозреваю, что проблема исходит от объектов dtypes, поэтому я попытался преобразовать подкадр в тип с плавающей запятой:

>>> sub_section = df.loc[5:,['a','b','c']].astype(float)
>>> sub_section
      a    b    c
5   0.0  1.0  2.0
6   0.0  1.0  2.0
7   0.0  1.0  2.0
8   0.0  1.0  2.0
9   0.0  1.0  2.0
10  0.0  1.0  2.0
11  0.0  1.0  2.0
>>> sub_section += row
>>> sub_section
      a    b    c
5   6.0  6.0  6.0
6   6.0  6.0  6.0
7   6.0  6.0  6.0
8   6.0  6.0  6.0
9   6.0  6.0  6.0
10  6.0  6.0  6.0
11  6.0  6.0  6.0
>>> df
                 a           b    c    d    e    f
0   data start row           5  NaN  NaN  NaN  NaN
1        row count           7  NaN  NaN  NaN  NaN
2          made by     foo.exe  NaN  NaN  NaN  NaN
3             date  01-01-2000  NaN  NaN  NaN  NaN
4                a           b    c    d    e    f
5              0.0         1.0  2.0  3.0  4.0  5.0
6              0.0         1.0  2.0  3.0  4.0  5.0
7              0.0         1.0  2.0  3.0  4.0  5.0
8              0.0         1.0  2.0  3.0  4.0  5.0
9              0.0         1.0  2.0  3.0  4.0  5.0
10             0.0         1.0  2.0  3.0  4.0  5.0
11             0.0         1.0  2.0  3.0  4.0  5.0
>>>

Очевидно, в этом случае df .loc [] возвращает копию, а затем изменение копии ничего не делает с df.

Как мне изменить части DataFrame (dtype = object), а затем сохранить изменения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...