我有一个以下格式的多索引csv:
; ;2000;2001;2002;2003;2004;2005;2006;2007;2008;2009;2010;2011;2012;2013;2014;2015;2016;2017
CO2;;;;;;;;;;;;;;;;;;;
010000 Agriculture and horticulture;AZZ;2312;2249;2165;2102;2034;2095;2106;2067;2060;1935;1985;1983;1893;1865;1750;1728;1777;1736
020000 Forestry;AZZ;40;42;39;43;46;50;49;49;46;52;62;62;67;60;63;66;67;66
030000 Fishing;AZZ;785;767;746;722;645;655;629;580;501;485;472;441;351;384;352;382;387;377
; ;2000;2001;2002;2003;2004;2005;2006;2007;2008;2009;2010;2011;2012;2013;2014;2015;2016;2017
More CO2;;;;;;;;;;;;;;;;;;;
010000 Agriculture and horticulture;AZZ;2312;2249;2165;2102;2034;2095;2106;2067;2060;1935;1985;1983;1893;1865;1750;1728;1777;1736
020000 Forestry;AZZ;40;42;39;43;46;50;49;49;46;52;62;62;67;60;63;66;67;66
030000 Fishing;AZZ;785;767;746;722;645;655;629;580;501;485;472;441;351;384;352;382;387;377
所以MultiIndex的两个级别实际上都在同一列上。
我试图按如下方式导入它:
df=pd.read_csv('my.csv',sep=";",header=[0],index_col=[0])
但这会返回以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 24: invalid start byte
我不确定位置24指向何处以及如何继续导入文件。
所需的输出
2000 2001 2002 2003 ...
CO2 010000 Agriculture and horticulture AZZ 2312.0 2249.0 2165.0 2102.0 ...
020000 Forestry AZZ 40.0 42.0 39.0 43.0 ...
030000 Fishing AZZ 785.0 767.0 746.0 722.0 ...
060000 Extraction of oil and gas BZ1 2174.0 2190.0 2184.0 2188.0 ...
080090 Extraction of gravel and stone BZ2 295.0 332.0 304.0 277.0 ...
2000 2001 2002 2003 ...
More CO2 010000 Agriculture and horticulture AZZ 2312.0 2249.0 2165.0 2102.0 ...
020000 Forestry AZZ 40.0 42.0 39.0 43.0 ...
030000 Fishing AZZ 785.0 767.0 746.0 722.0 ...
060000 Extraction of oil and gas BZ1 2174.0 2190.0 2184.0 2188.0 ...
080090 Extraction of gravel and stone BZ2 295.0 332.0 304.0 277.0 ...
答案 0 :(得分:2)
您可以编码gbk以读取
df=pd.read_csv('./AirEmissions117.csv',sep=';',encoding='gbk')
答案 1 :(得分:1)
对我来说,工作集encoding
然后需要进行一些处理:
df = pd.read_csv('AirEmissions117.csv',
sep=";",
encoding = "ISO-8859-1",
)
#check if last 5 columns contains only NaN
m = df.iloc[:, -5:].isna().all(1)
#create new column in first position by types
df.insert(0, 'type', df.iloc[:, 0].where(m).ffill())
#remove NaNs rows and create MultiIndex
df = df[~m].set_index(df.columns[:3].tolist())