Python 3.x 创建dataframe,其中每行由另一个dataframe的列名和值组成
我编写了以下代码:Python 3.x 创建dataframe,其中每行由另一个dataframe的列名和值组成,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我编写了以下代码: df = pd.read_csv('breast-cancer-wisconsin.data.csv', nrows= 300) columns_df = pd.DataFrame(columns = ['column_name', 'value']) columns = df.columns.values for index, row in df.iterrows(): for column in columns: columns_df = colu
df = pd.read_csv('breast-cancer-wisconsin.data.csv', nrows= 300)
columns_df = pd.DataFrame(columns = ['column_name', 'value'])
columns = df.columns.values
for index, row in df.iterrows():
for column in columns:
columns_df = columns_df.append({'column_name': column, 'value': row[column]}, ignore_index=True)
此脚本将csv文件读取到数据帧,然后将每个列名及其对应的值附加到新的数据帧。如果我跑
print(columns_df[-10:])
我得到以下输出
column_name value
2300 clump_thickness 5
2301 unif_cell_size 5
2302 unif_cell_shape 7
2303 marg_adhesion 8
2304 single_epith_cell_size 6
2305 bare_nuclei 10
2306 bland_chrom 7
2307 norm_nucleoli 4
2308 mitoses 1
2309 class 4
2310 clump_thickness 5
2311 unif_cell_size 3
2312 unif_cell_shape 4
2313 marg_adhesion 3
2314 single_epith_cell_size 4
2315 bare_nuclei 5
2316 bland_chrom 4
2317 norm_nucleoli 7
2318 mitoses 1
2319 class 2
2320 clump_thickness 5
2321 unif_cell_size 4
2322 unif_cell_shape 3
2323 marg_adhesion 1
2324 single_epith_cell_size 2
2325 bare_nuclei -99999
2326 bland_chrom 2
2327 norm_nucleoli 3
2328 mitoses 1
2329 class 2
2330 clump_thickness 8
2331 unif_cell_size 2
2332 unif_cell_shape 1
2333 marg_adhesion 1
2334 single_epith_cell_size 5
2335 bare_nuclei 1
2336 bland_chrom 1
2337 norm_nucleoli 1
2338 mitoses 1
2339 class 2
2340 clump_thickness 9
2341 unif_cell_size 1
2342 unif_cell_shape 2
2343 marg_adhesion 6
2344 single_epith_cell_size 4
2345 bare_nuclei 10
2346 bland_chrom 7
2347 norm_nucleoli 7
2348 mitoses 2
2349 class 4
不幸的是,该脚本速度不是很快,并且需要很长时间才能使用大型数据帧执行
问题:是否有更优雅/更快的方法来实现这些结果
来自我的输入数据(csv文件)的示例:
如果性能很重要,但值的顺序发生了变化:
df = df.melt('id')
print (df.head())
id variable value
0 1000025 clump_thickness 5
1 1002945 clump_thickness 5
2 1015425 clump_thickness 3
3 1016277 clump_thickness 6
4 1017023 clump_thickness 4
或使用:
df = df.set_index('id').stack().rename_axis(['id','var']).reset_index(name='val')
print (df.head())
id var val
0 1000025 clump_thickness 5
1 1000025 unif_cell_size 1
2 1000025 unif_cell_shape 1
3 1000025 marg_adhesion 1
4 1000025 single_epith_cell_size 2
您可以添加输入数据的样本吗?但它看起来像
堆栈可能吗df.stack().reset_index()
感谢您提供数据,但输出无法匹配。是否可以创建10行预期输出的输入数据?@jezrael对不起,我不明白你的意思!
df = df.set_index('id').stack().rename_axis(['id','var']).reset_index(name='val')
print (df.head())
id var val
0 1000025 clump_thickness 5
1 1000025 unif_cell_size 1
2 1000025 unif_cell_shape 1
3 1000025 marg_adhesion 1
4 1000025 single_epith_cell_size 2