【发布时间】:2023-01-10 06:55:17
【问题描述】:
我有一个文件“Person_details.csv”,它共有 507 列(变量/特征)和 50k 行。我有 7 个分类变量(['FirstRace','Languages', 'Ethnicity', 'City', 'Country', 'Month','Field'] 和 500 个数值变量(例如:['Person_ID','age' , '薪水', '经验', '身高', 等等]). 这7个分类变量(['FirstRace', 'Languages', 'Ethnicity', 'City', 'Country', 'Month',' Field']) 有 20 到 400 个唯一值,这将增加特征空间,因此我在使用以下代码执行单热编码时选择前 10 个唯一值。代码工作正常,但我正在对每个值执行一个热编码分别将 7 个分类变量保存在不同的文件中,然后将它们与主文件(Person_details.csv)连接起来。有没有一种方法可以同时对所有 7 个变量执行编码并将它们存储在一个文件中?任何帮助表示赞赏。提前致谢。
执行单热编码的代码:
import pandas as pd
df = pd.read_csv("Person_details.csv", usecols= ['FirstRace','Languages', 'Ethnicity', 'City', 'Country', 'Month', 'Field'])
for x in df.columns:
#printing unique values
print(x ,':', len(new_df[x].unique()))
counts = df['FirstRace'].value_counts().sum()
top_10_labels = [y for y in df.FirstRace.value_counts().sort_values(ascending=False).head(10).index]
df=pd.get_dummies(df['FirstRace']).sample(10)
def top_x(df2,variable,top_x_labels):
for label in top_x_labels:
df2[variable+'_'+label] = np.where(data[variable]==label,1,0)
data = pd.read_csv("Person_details.csv",usecols = ['Person_ID','FirstRace'])
top_x(data,'FirstRace',top_10_labels)
data.to_csv(r'First_race.csv', index=False)
在上面的代码中,每次我替换分类变量并执行单热编码时,都会选择前 10 个唯一值并将它们保存在单独的 .csv 文件中。示例:我将“FirstRace”替换为“Languages”,然后替换为“Ethnicity”等。从“counts = df['FirstRace'].value_counts().sum()”行开始,直到最后一行我每次都替换列名时间并将每个分类变量的前 10 个唯一值保存在不同的文件中。
【问题讨论】:
-
我仍然无法弄清楚。只是为了让这个问题简单化。我想对 7 个分类变量执行单热编码,选择前 10 个唯一值并将单热编码的前 10 列保存在文件中。任何帮助表示赞赏。谢谢
标签: python pandas dataframe categorical-data one-hot-encoding