Pandas конкатенация DataFrame
Не подскажите как из вот из этой таблицы
и из этой
получить вот это:
Пробовал использовать pd.concat(df1, df2) и вот это получалось:
(лишняя строка Time-test1-test2-test3)
Ответы (1 шт):
Как и в вашем предыдущем вопросе, ваша главная проблема, по-моему, в недопонимании базовых принципов того, как работает Pandas и что из себя представляет Pandas.DataFrame.
Таблица в Pandas (объект типа: Pandas.DataFrame) это типизированный набор именованых столбцов (объект типа: Pandas.Series).
Пример:
In [95]: df = pd.DataFrame({"int_col": [1, 2, 3], "float_col":[3.1415, 2.7183, 0], "str_col":["aa", "bb", "cc"]})
In [96]: df
Out[96]:
int_col float_col str_col
0 1 3.1415 aa
1 2 2.7183 bb
2 3 0.0000 cc
In [97]: df.dtypes
Out[97]:
int_col int64
float_col float64
str_col object
dtype: object
Каждый столбец имеет имя и тип данных. Мы можем легко выполнять арифметические операции над числовыми столбцами:
In [99]: df["int_col"].sum()
Out[99]: 6
Теперь давайте посмотрим что произойдет если присвоить одной ячейке числового столбца строковое значение:
In [103]: df.loc[0, "int_col"] = "Time"
In [104]: df
Out[104]:
int_col float_col str_col
0 Time 3.1415 aa
1 2 2.7183 bb
2 3 0.0000 cc
In [105]: df.dtypes
Out[105]:
int_col object # <------ тип столбца поменялся с `int64` на `object` (строка)
float_col float64
str_col object
dtype: object
теперь мы не можем выполнять арифметические операции над этим столбцом:
In [106]: df["int_col"].sum()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
...<skipped>...
TypeError: can only concatenate str (not "int") to str
NOTE: Таким образом изменив всего одну ячейку на строку в числовом столбце, мы потеряли возможность выполнять арифметические операции над всем столбцом. Эта проблема решается при помощи уродливых "костылей", но не проще ли изначально не создавать себе таких проблем??
Вывод:
Проблемы вы себе создали на более ранних этапах, когда неправильно читали/сохраняли данные из/в CSV / Excel / HTML / etc. файлов в Pandas DataFrame.
Исправлять такие ошибки гораздо сложнее и затратнее по сравнению с тем, чтобы изначально правильно прочитать данные.
Поэтому правильным подходом в вашем случае будет правильное чтение / парсинг данных на более ранних этапах, тогда и pd.concat([df1, df2]) будет правильно работать и типы данных не испортятся (не будут превращаться в object) и арифметические операции будут работать и т.д. и т.п.



