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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注