使用 pandas 重塑长列 csv 文件以获得合适的数据框 table
Reshape a long column csv file using pandas to get a proper dataframe table
我在 csv 文件中的单列中有数据,我想将其转换为 table 列 headers。输入文件的类型为:
df1 = pd.DataFrame(['CompA','0','0','10.3x','50.0%'
,'CompB','0','','13.2x','40.0%',
'CompC','0','0','2.8x','13.5%',
'CompD','0','0','3.8x','53.2%'
])
我想用 headers
将其转换为 table 数据框
column_names = ['Company name','Revenues','Gross Profit','P/E Multiple','Operating Margin']
因此,各个公司(在上面的示例中是 4 家公司 CompA、CompB、CompC 和 CompD,
每个都有自己的数据行
我尝试了下面的方法,但是很不优雅,更不用说,它涉及到数据的手动计数,这仍然只是添加了 'header column' 数据,但仍然没有生成 table:
arr1 = column_names*4
df1[1] = arr1
然后当我尝试调整它时,它并没有将收入和毛利润等放在一行中,而是为每一个单独创建一行。这就是我所做的:
df2 = df1.pivot(columns=1,values=0)
我该如何解决这个问题?
您可以使用 column_names
reshape
数据框中的值
pd.DataFrame(df1.to_numpy().reshape(-1, len(column_names)), columns=column_names)
输出:
Company name Revenues Gross Profit P/E Multiple Operating Margin
0 CompA 0 0 10.3x 50.0%
1 CompB 0 13.2x 40.0%
2 CompC 0 0 2.8x 13.5%
3 CompD 0 0 3.8x 53.2%
你几乎是正确的。 Pivot 可以这样工作,但是,它需要三样东西,要旋转的值,要旋转的列和索引。
我认为这里不需要手动计数。
# Get number of entities in long list
n_entities = int(len(df)/len(column_names))
# Generates n-repetitions of column_names and assign to df for pivot
df['col_name'] = column_names * n_entities
# Generate and assign an index column
index_vals = []
for i in range(n_entities):
index_vals.extend([str(i)]*len(column_names))
df['index_val'] = index_vals
df.pivot(index = 'index_val', columns='col_name', values=0)
我在 csv 文件中的单列中有数据,我想将其转换为 table 列 headers。输入文件的类型为:
df1 = pd.DataFrame(['CompA','0','0','10.3x','50.0%'
,'CompB','0','','13.2x','40.0%',
'CompC','0','0','2.8x','13.5%',
'CompD','0','0','3.8x','53.2%'
])
我想用 headers
将其转换为 table 数据框column_names = ['Company name','Revenues','Gross Profit','P/E Multiple','Operating Margin']
因此,各个公司(在上面的示例中是 4 家公司 CompA、CompB、CompC 和 CompD, 每个都有自己的数据行
我尝试了下面的方法,但是很不优雅,更不用说,它涉及到数据的手动计数,这仍然只是添加了 'header column' 数据,但仍然没有生成 table:
arr1 = column_names*4
df1[1] = arr1
然后当我尝试调整它时,它并没有将收入和毛利润等放在一行中,而是为每一个单独创建一行。这就是我所做的:
df2 = df1.pivot(columns=1,values=0)
我该如何解决这个问题?
您可以使用 column_names
reshape
数据框中的值
pd.DataFrame(df1.to_numpy().reshape(-1, len(column_names)), columns=column_names)
输出:
Company name Revenues Gross Profit P/E Multiple Operating Margin
0 CompA 0 0 10.3x 50.0%
1 CompB 0 13.2x 40.0%
2 CompC 0 0 2.8x 13.5%
3 CompD 0 0 3.8x 53.2%
你几乎是正确的。 Pivot 可以这样工作,但是,它需要三样东西,要旋转的值,要旋转的列和索引。
我认为这里不需要手动计数。
# Get number of entities in long list
n_entities = int(len(df)/len(column_names))
# Generates n-repetitions of column_names and assign to df for pivot
df['col_name'] = column_names * n_entities
# Generate and assign an index column
index_vals = []
for i in range(n_entities):
index_vals.extend([str(i)]*len(column_names))
df['index_val'] = index_vals
df.pivot(index = 'index_val', columns='col_name', values=0)