使用pandas重塑长列csv文件,以获得适当的dataframe表

2024-09-30 22:20:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我将csv文件中的数据放在一个列中,我希望将其转换为具有列标题的表。输入文件的类型为:

df1 = pd.DataFrame(['CompA','$200','$450','10.3x','50.0%'
        ,'CompB','$300','$50','13.2x','40.0%',
        'CompC','$100','$150','2.8x','13.5%',
        'CompD','$150','$250','3.8x','53.2%'
        ])

我想将其转换为带有标题的表数据帧

column_names = ['Company name','Revenues','Gross Profit','P/E Multiple','Operating Margin']

因此,各个公司(在上面的示例中是4家公司CompA、CompB、CompC和CompD, 每一行都有自己的数据

我尝试了以下方法,但它非常不雅观,更不用说,它涉及到数据的手动计数,这仍然只是添加了“header column”数据,但仍然无法生成表:

arr1 = column_names*4
df1[1] = arr1

然后,当我尝试将其转为中心时,它并没有将收入和毛利等放在一行中,而是为每一行创建单独的一行。这就是我所做的:

df2 = df1.pivot(columns=1,values=0)

我该如何解决这个问题


Tags: 文件csv数据标题类型names公司column
2条回答

您可以使用column_names命令来^{}数据帧中的值

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     $200         $450        10.3x            50.0%
1        CompB     $300          $50        13.2x            40.0%
2        CompC     $100         $150         2.8x            13.5%
3        CompD     $150         $250         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)

相关问题 更多 >