![](/img/trans.png)
[英]Read and write Pandas DataFrame with multi-row and multi-column index
[英]Mark Empty values in Pandas DataFrame Multi-Row Header
我有一個名為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
我認為使用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,可以在此處檢查。 它仍然神秘
編輯, set_levels
仍然是可以使用的越野車:
df.columns = df.columns.set_levels(df.columns.levels[1].str.replace('Un.*', ''), level=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
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.