我有一个如下所示的DataFrame:
0 1 2
Time Blocks Left Blocks Added
0 NaN Monday Tuesday
1 NaN 2020-01-01 2020-01-02
2 01:00:00 44 1420
3 02:00:00 55 1520
4 03:00:00 65 1000
5 04:00:00 75 1110
现在,我想为第1和2列中的值添加第2行和第3行。
所以输出应该是
0 1 2
Time Blocks Left Blocks Added
0 NaN Monday Tuesday
1 NaN 2020-01-01 2020-01-02
2 01:00:00 44 1420
3 02:00:00 55 1520
4 03:00:00 65 1000
5 04:00:00 75 1110
99 2940
但是由于第1列和第2列在第1行中包含日期,因此pandas将整个列检测为对象数据类型,因此有人可以告诉我在这种情况下如何进行加法
答案 0 :(得分:0)
我认为更好的方法是在列中使用具有MultiIndex的DataFrame,而不是将数据与元数据混合:
df = df.set_index(0)
t = df.iloc[:3].apply(tuple).tolist()
df.columns = pd.MultiIndex.from_tuples(t)
df = df.iloc[3:].astype(int).rename_axis(None)
print (df)
Blocks Left Blocks Added
Monday Tuesday
2020-01-01 2020-01-02
01:00:00 44 1420
02:00:00 55 1520
03:00:00 65 1000
04:00:00 75 1110
如果可能,请在DataFrame
中用MultiIndex in columns
创建read_csv
:
df = pd.read_csv(file, index_col=[0], header=[0,1,2])
然后您可以通过setting with enlargement
添加新行:
df.loc['05:00:00'] = [99, 2940]
print (df)
Blocks Left Blocks Added
Monday Tuesday
2020-01-01 2020-01-02
01:00:00 44 1420
02:00:00 55 1520
03:00:00 65 1000
04:00:00 75 1110
05:00:00 99 2940
答案 1 :(得分:0)
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.append.html
您可以尝试一下。
df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
df
A B
0 1 2
1 3 4
df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))
df.append(df2)
A B
0 1 2
1 3 4
0 5 6
1 7 8