dataframe 列名重新排序
在用list包含多个dict的模式生成dataframe时,由于dict的无序性,而uci很多数据的特征名直接是1,2,3...,生成的dataframe和原生的不一样,
为了方便观看和使用,我们将其列名排序:
有以下两种方法(都不包含y列的情况下):
1、(我的):
df.columns = df.columns.astype(int)
df.sort_index(axis=1,inplace=True)
先将列名从字符串转为int型,然后再对列名排序。
2、(网上看到的):
对于这样的数据: ['Q1.3','Q6.1','Q1.2','Q1.1',......]
要变为这样的: ['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]
df.reindex_axis(sorted(df.columns), axis=1)
这样的话,似乎对于字符串型数据也可以排序(但如果要解决我那个问题,也要先进行数据类型的转换)
最后,附上完整的从uci.txt文本数据类型转换为dataframe表格式的numerical类型代码:
X,y = [],[] with open("ionosphere_scale.txt") as f: lines = f.readlines() for line in lines: line = line.split() y.append(line[0]) X.append({i.split(":")[0]:i.split(":")[1] for i in line[1:]}) df = pd.DataFrame(X,dtype="float") n_feat = len(df.columns) df.columns = df.columns.astype(int) df.sort_index(axis=1,inplace=True) df["y"] = np.array(y,dtype=float) print(df.info()) df.to_excel("ionosphere_scale.xlsx",index=None)
最后,mark一篇关于数据类型转换的文章:https://vimsky.com/article/3694.html