将dataframe拆分为几列,Python

将dataframe拆分为几列,Python,python,dataframe,Python,Dataframe,一些操作的结果是,我得到一个如下所示的数据帧: 0 1 0 (aut, aut) (1.0, 0.0) 1 (isr, pcn) (0.0621031946211, 0.0840317734128) 2 (wlf, gum) (0.00971778368827, 0.787082275372) 3

一些操作的结果是,我得到一个如下所示的数据帧:

                0                                    1
0      (aut, aut)                           (1.0, 0.0)
1      (isr, pcn)   (0.0621031946211, 0.0840317734128)
2      (wlf, gum)   (0.00971778368827, 0.787082275372)
3      (lka, are)  (0.184325574632, 2.37291167033e-07)
4      (mmr, brb)  (-0.00659784629805, 0.854498462056)
5      (umi, mar)  (0.136002437743, 0.000146047773528)
6      (rwa, arm)  (0.143873473167, 5.82638804266e-05)
      iso_a  iso_b     value_1               value_2
0      aut    aut        1.0                   0.0
1      isr    pcn   0.062103194621     0.0840317734128
2      wlf    gum   0.009717783688     0.787082275372
3      lka    are   0.184325574632     2.37291167033e-07
4      mmr    brb  -0.006597846298     0.854498462056
5      umi    mar   0.136002437743     0.000146047773528
6      rwa    arm   0.143873473167     5.82638804266e-05
但我需要将此数据帧拆分为如下内容:

                0                                    1
0      (aut, aut)                           (1.0, 0.0)
1      (isr, pcn)   (0.0621031946211, 0.0840317734128)
2      (wlf, gum)   (0.00971778368827, 0.787082275372)
3      (lka, are)  (0.184325574632, 2.37291167033e-07)
4      (mmr, brb)  (-0.00659784629805, 0.854498462056)
5      (umi, mar)  (0.136002437743, 0.000146047773528)
6      (rwa, arm)  (0.143873473167, 5.82638804266e-05)
      iso_a  iso_b     value_1               value_2
0      aut    aut        1.0                   0.0
1      isr    pcn   0.062103194621     0.0840317734128
2      wlf    gum   0.009717783688     0.787082275372
3      lka    are   0.184325574632     2.37291167033e-07
4      mmr    brb  -0.006597846298     0.854498462056
5      umi    mar   0.136002437743     0.000146047773528
6      rwa    arm   0.143873473167     5.82638804266e-05
由于您对需要读取的输入数据的格式给出了非常(没有)的详细信息,因此这里有一个基本但简单的方法:

ls = []
with open('del.txt', 'r') as f:
    for line in f:
        ls.append(line.replace('(', '').replace(')', '').replace(',', '').split())


for l in ls[1:]:
    print(l)
这将给出一个列表,其中每行包含一个子列表,每个元素存储为字符串:

['0', 'aut', 'aut', '1.0', '0.0']
['1', 'isr', 'pcn', '0.0621031946211', '0.0840317734128']
['2', 'wlf', 'gum', '0.00971778368827', '0.787082275372']
['3', 'lka', 'are', '0.184325574632', '2.37291167033e-07']
['4', 'mmr', 'brb', '-0.00659784629805', '0.854498462056']
['5', 'umi', 'mar', '0.136002437743', '0.000146047773528']
['6', 'rwa', 'arm', '0.143873473167', '5.82638804266e-05']
下面是使用该方法的另一种方法,它会产生相同的结果

ls = []
with open('del.txt', 'r') as f:
    for line in f:
        ls.append(line.translate(None, "(),").split())
由于您对需要读取的输入数据的格式给出了非常(没有)的详细信息,因此这里有一个基本但简单的方法:

ls = []
with open('del.txt', 'r') as f:
    for line in f:
        ls.append(line.replace('(', '').replace(')', '').replace(',', '').split())


for l in ls[1:]:
    print(l)
这将给出一个列表,其中每行包含一个子列表,每个元素存储为字符串:

['0', 'aut', 'aut', '1.0', '0.0']
['1', 'isr', 'pcn', '0.0621031946211', '0.0840317734128']
['2', 'wlf', 'gum', '0.00971778368827', '0.787082275372']
['3', 'lka', 'are', '0.184325574632', '2.37291167033e-07']
['4', 'mmr', 'brb', '-0.00659784629805', '0.854498462056']
['5', 'umi', 'mar', '0.136002437743', '0.000146047773528']
['6', 'rwa', 'arm', '0.143873473167', '5.82638804266e-05']
下面是使用该方法的另一种方法,它会产生相同的结果

ls = []
with open('del.txt', 'r') as f:
    for line in f:
        ls.append(line.translate(None, "(),").split())

我不确定这是输入文件还是多维数组。 假设您的输入数据帧是一个多维数组,其中每个元素都有另一个包含两个元素的数组

def getListOfDictionaries(dataFrame):
  newList = list()
  for row in dataFrame:
    newList.append({'iso_a': row[0][0],
                    'iso_b': row[0][1],
                    'value_1': row[1][0],
                    'value_2': row[1][1]})
  return newList

正如我所说,我不知道输入数据的格式是什么,我不确定这是输入文件还是多维数组。 假设您的输入数据帧是一个多维数组,其中每个元素都有另一个包含两个元素的数组

def getListOfDictionaries(dataFrame):
  newList = list()
  for row in dataFrame:
    newList.append({'iso_a': row[0][0],
                    'iso_b': row[0][1],
                    'value_1': row[1][0],
                    'value_2': row[1][1]})
  return newList
正如我所说,我不知道输入数据的格式是什么,我可能:

def x(col):
    return col[0]

df['ios_a'] = df[0].apply(x)
df['value_1'] = df[1].apply(x)


def y(col):
    return col[1]

df['ios_b'] = df[0].apply(y)
df['value_2'] = df[1].apply(y)
然后,如果愿意,可以删除前两列

del df[0]
del df[1]
这是一个有点笨拙(不干燥),但做的工作
def x():
获取列(列
df[0]
df[1]
),然后返回每行元组的第一部分,将其放入新分配的列中(例如
df['iso_a']
) 然后
defy():
执行相同的操作,但这次返回每个元组的第二部分。这有意义吗?另外,这是假设您正在使用熊猫数据帧。

我可能:

def x(col):
    return col[0]

df['ios_a'] = df[0].apply(x)
df['value_1'] = df[1].apply(x)


def y(col):
    return col[1]

df['ios_b'] = df[0].apply(y)
df['value_2'] = df[1].apply(y)
然后,如果愿意,可以删除前两列

del df[0]
del df[1]
这是一个有点笨拙(不干燥),但做的工作
def x():
获取列(列
df[0]
df[1]
),然后返回每行元组的第一部分,将其放入新分配的列中(例如
df['iso_a']

然后
defy():
执行相同的操作,但这次返回每个元组的第二部分。这有意义吗?另外,这是假设您正在使用Pandas dataframe。

您尝试过什么吗?您的dataframe元组的元素(看起来是这样的)还是元组的字符串表示形式(也可能是这样的)?对不起,原始数据是一个字典,如下所示:{('aut','aut'):(1.0,0.0),('isr',pcn'):(0.06210319462108603,0.084031773412780841),('wlf','gum'):(0.0097177836882651521,0.78708227537249009),('lka','are'):(0.18432557463221144,2.372911670329611E-07),('mmr','brb'):('0.00659784680470038,0.8544984620563465),('umi','mar'):(0.13600243774288176,0.477735466),'(0.143873473316681087,5.826388042658121e-05),…您尝试过什么吗?是数据帧元组的元素(它们看起来像什么)还是元组的字符串表示形式(它们也可能是什么)?对不起,原始数据是一个字典,如下所示:{('aut','aut'):(1.0,0.0),('isr','pcn'):(0.06210319462108603,0.084031773412780841),('wlf','gum'):(0.0097177836882651521,0.78708227537249009),('lka','are'):(0.18432557463221144,2.372911670329611E-07),('mmr','brb'):('0.00659784680470038,0.8544984620563465),('umi','mar'):(0.13600243774288176,0.477735466),'(0.143873473316681087,5.826388042658121e-05),…对不起,我之前忘记回答这个问题:我得到的第一个数据帧是一些操作的结果:对于数据2中的x。列:对于数据2中的y。列:d[x,y]=pearsonr(数据2[x],数据2[y])结果是一个类似以下的字典:{('aut aut','aut'):(1.0,0),('isr','pcn'):(0.06210319462108603,0.084031773412780841),('wlf','gum'):(0.0097177836882651521,0.78708227537249009),('lka','are'):(0.18432557463221144,2.372911673293611E-07)。我最后需要的是…原始问题中的结果是一个数据帧。抱歉,我之前忘记回答:我得到的第一个数据帧是一些操作的结果:对于数据2中的x。列:对于数据2中的y。列:d[x,y]=pearsonr(数据2[x],数据2[y])结果是一个如下所示的字典:{('aut','aut'):(1.0,0.0),('isr','pcn'):(0.06210319462108603,0.084031773412780841),('wlf','gum'):(0.0097177836882651521,0.78708227537249009),('lka','are'):(0.18432557463221144,2.372911673293611E-07)。最后我需要的是一个数据框,这是原始问题的结果。