我有一个名为 mrh.csv 的CSV文件,前两行代表标题:
Name,Height,Age
"",Metres,""
A,-1,25
B,95,-1
我使用以下代码将其读入DataFrame:
import pandas as pd
pd.read_csv('mrh.csv', header=[0,1], na_values=[-1,''])
这导致数据框具有以下内容:
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_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
答案 0 :(得分:1)
我认为不可能使用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)
输出:
Name Height Age
Metres
0 A NaN 25.0
1 B 95.0 NaN
要知道两次分配df.columns,您可以查看here。它还是神秘的
编辑,set_levels
仍然是您可以使用的错误:
df.columns = df.columns.set_levels(df.columns.levels[1].str.replace('Un.*', ''), level=1)
答案 1 :(得分:1)
您可以创建新的MultiIndex并分配给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
或者:
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
答案 2 :(得分:0)
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
输出:
Name Height Age
- Metres -
0 A NaN 25.0
1 B 95 NaN