无法指定和拆分Pandas数据框以分别修改它们

时间:2019-04-03 23:51:17

标签: python-3.x pandas

我正在尝试通过将每列分为一个单独的索引(如果其中包含“;”)将熊猫数据框从一个索引拆分为多个索引。我已经找到了一种成功实现小规模目标的方法,但是当我将其移入主项目时,我知道我需要一个更好的解决方案。

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

感谢您的时间和投入,希望我不会忽略一些太简单的事情。

2 个答案:

答案 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