首页 > 解决方案 > Pandas DataFrame 添加标头使所有值变为 NaN

问题描述

我是 Python 新手。我通过几次点击导入了 excel 文件。然后选择 1 次点击并尝试放置 Hierarchical 列标题,但它会将所有值生成为 NaN。然后,如果我将输入从我的 excel 数据更改为 Numpy 数组,它工作正常。我不确定我错在哪里。

下面是代码。

fn= r'C:\Users\Yun\NN_FX\Bbg_Today_Data.xlsx'
a=df_dict['Output'].iloc[:,[0,1,2,3]]
a.head(15)

输出

arrays = [["KRW","KRW", "MYR","MYR"],["Date", "Price","Date", "Price"]]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples)
bb=pd.DataFrame(a,columns=arrays)
bb.head(15)

在此处输入图像描述

但是如果我尝试使用 Numpy 数组。它工作正常。

arrays = [["KRW","KRW", "MYR","MYR"],["Date", "Price","Date", "Price"]]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples)
aa=np.random.randn(15, 4)
bb=pd.DataFrame(aa,columns=arrays)
bb.head(15)

在此处输入图像描述

有人可以告诉我出了什么问题吗?

标签: pythonpandasdataframeheader

解决方案


通过columns属性设置列标签就够了

import pandas as pd

fn = r'c:\test\Bbg_Today_Data.xlsx'
df_dict = pd.read_excel(fn, sheet_name=None)
a = df_dict['Output'].iloc[:, [0, 1, 2, 3]]
a.columns = [["KRW", "KRW", "MYR", "MYR"], ["Date", "Price", "Date", "Price"]]
print(a.head(15))

输出:

                    KRW                               MYR           
                   Date        Price                 Date      Price
0   Updated at 09:13:39          NaN  Updated at 09:13:39        NaN
1              KRW=KFTC          NaN                 MYR=        NaN
2             Timestamp  Trade Close            Timestamp  Bid Close
3   2021-08-20 00:00:00       1179.6  2021-08-20 00:00:00      4.236
4   2021-08-19 00:00:00       1176.2  2021-08-19 00:00:00      4.237
5   2021-08-18 00:00:00         1168  2021-08-18 00:00:00      4.236
...

推荐阅读