我正在尝试通过将每列分为一个单独的索引(如果其中包含“;”)将熊猫数据框从一个索引拆分为多个索引。我已经找到了一种成功实现小规模目标的方法,但是当我将其移入主项目时,我知道我需要一个更好的解决方案。
import pandas as pd
input_values = [['1;3', '2;5', '3;7']]
df = pd.DataFrame(input_values, columns = ['a', 'b', 'c'])
columns = ['a', 'b', 'c']
data1 = pd.DataFrame(input_values, columns = ['a', 'b', 'c'])
data2 = pd.DataFrame(input_values, columns = ['a', 'b', 'c'])
for column in columns:
new = df[column].str.split(";", expand = True)
data1[column] = new[0]
data2[column] = new[1]
df = data1.merge(data2, how='outer')
# df print
print('\n', df)
哪个提供了我想要的输出:
a b c
0 1 2 3
1 3 5 7
我当前的问题是我想要df = data1 = data2,而不必像在解决方案中那样分别指定每个参数。
我知道我忽略了什么更好的解决方案?我正在寻找一种方法来一次指定我的数据框,然后将其他变量设置为相等。
我想拥有的东西(但是,这不起作用,因为每个数据帧都在一起更新):
df = pd.DataFrame(input_values, columns = ['a', 'b', 'c'])
data1 = df
data2 = df
感谢您的时间和投入,希望我不会忽略一些太简单的事情。
答案 0 :(得分:2)
检查以下各项是否对您有用:
df
#Out[266]:
# a b c
#0 1;3 2;5 3;7
df.T[0].str.split(';', expand=True).T
#Out[267]:
# a b c
#0 1 2 3
#1 3 5 7
答案 1 :(得分:0)
您可以在列表理解中拆分列并连接结果:
pd.concat([df[x].str.split(";", expand=True).stack()
for x in df], axis=1).loc[0]
# 0 1 2
#0 1 2 3
#1 3 5 7
还有一个更有效的解决方案:
df.T[0].str.split(";", expand=True).T
# a b c
#0 1 2 3
#1 3 5 7