在Pandas DataFrame多行头中标记空值

2024-09-30 18:29:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为mrh.csv公司前两行表示标题:

Name,Height,Age
"",Metres,""
A,-1,25
B,95,-1

我使用以下代码将其读入DataFrame:

^{pr2}$

这将生成包含以下内容的数据帧:

    Name                Height  Age
    Unnamed: 0_level_1  Metres  Unnamed: 2_level_1

0   A                   NaN     25.0
1   B                   95.0    NaN

使用read_csv的na_values参数,我可以在文件中标记为-1的缺失值,但当标记为“”(我也尝试了-1)时,丢失的标题行值将显示为未命名:x_level_y(如果改为使用-1)。在

有没有办法不显示丢失的值-删除未命名的:x\u level_y或用有意义的值替换它?在

期望输出1:

    Name  Height  Age
          Metres    

0   A     NaN     25.0
1   B     95.0    NaN

期望输出2:

    Name  Height  Age
    -     Metres  - 

0   A     NaN     25.0
1   B     95.0    NaN

Tags: csv代码name标记标题dataframeage公司
3条回答

我认为不可能使用read_csv,您可以在加载后修改索引,即:

from io import StringIO

txt = '''Name,Height,Age
"",Metres,""
A,-1,25
B,95,-1'''

df = pd.read_csv(StringIO(txt),header=[0,1],na_values=['-1',''])

df.columns = df.columns.set_levels(df.columns.get_level_values(level=1).str.replace('Un.*',''),level=1)
df.columns = df.columns.set_levels(df.columns.get_level_values(level=1).str.replace('Un.*',''),level=1)

输出:

^{pr2}$

懂得分配数据框列您可以检查两次here。它仍然很神秘

编辑,set_levels仍然有缺陷,您可以使用:

df.columns = df.columns.set_levels(df.columns.levels[1].str.replace('Un.*', ''), level=1)
import pandas as pd
pd.read_csv("mrh.csv").fillna("-").to_csv("mrh.csv",index=None)
df1 = pd.read_csv("mrh.csv",header=[0,1],na_values=[-1,''])
df1

输出:

^{pr2}$

您可以创建新的多重索引并分配给columns

df = pd.read_csv('mrh.csv', header=[0,1], na_values=[-1,''])

a = df.columns.get_level_values(level=0)
b = df.columns.get_level_values(level=1).str.replace('Un.*','')
df.columns = [a, b]
print (df)
  Name Height   Age
       Metres      
0    A    NaN  25.0
1    B   95.0   NaN

或者:

^{pr2}$

相关问题 更多 >