如何在列具有混合数据类型的熊猫中添加2行?

时间:2020-02-09 16:31:05

标签: python python-3.x pandas csv

我有一个如下所示的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将整个列检测为对象数据类型,因此有人可以告诉我在这种情况下如何进行加法

2 个答案:

答案 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