如何将一系列元组转换为DataFrame?

时间:2019-05-29 20:13:37

标签: pandas

我正在尝试在数据框中的其他列中添加一些额外的数据。

考虑以下示例代码:

import pandas
import numpy

def more_data(d):
    return 1, 2

df = pandas.DataFrame({"A":[1, 2, 3], "B":[17, 16, 15]})

x = df.apply(more_data, axis=1)
df1 = pandas.DataFrame(x)
df2 = pandas.concat([df, df1], axis=1)

print(df2)

输出为:

A  B       0
0  1  17  (1, 2)
1  2  16  (1, 2)
2  3  15  (1, 2)

毫不奇怪,因为apply()返回一个元组序列,该序列将作为元组列忠实地添加到数据帧中。但是,我想要的是在元组中返回值的另外两列。那怎么办?

3 个答案:

答案 0 :(得分:1)

您与自己的解决方案非常接近,如果将数据框转换为列表,然后将其构造为再次定义列的数据框,则可以使用:

def more_data(d):
    return 1, 2

df = pd.DataFrame({"A":[1, 2, 3], "B":[17, 16, 15]})

x = df.apply(more_data, axis=1)
df1 = pd.DataFrame(x.tolist(), columns=['Col1', 'Col2']) # <-- line which is different
df2 = pd.concat([df, df1], axis=1)

   A   B  Col1  Col2
0  1  17     1     2
1  2  16     1     2
2  3  15     1     2

答案 1 :(得分:0)

尝试一下

import pandas
import numpy

def more_data(d):
    return 1, 2

df = pandas.DataFrame({"A":[1, 2, 3], "B":[17, 16, 15]})

x = df.apply(more_data, axis=1)
df1 = pandas.DataFrame(x)
df1= pandas.concat([df, df1], axis=1)

df1[['new_1', 'new_2']] = pandas.DataFrame([list(x) for x in df1[0]])

# Result
print(df1)
   A   B       0  new_1  new_2
0  1  17  (1, 2)      1      2
1  2  16  (1, 2)      1      2
2  3  15  (1, 2)      1      2

答案 2 :(得分:0)

您似乎能够获得的最接近的是<dependency> <groupId>com.google.firebase</groupId> <artifactId>firebase-admin</artifactId> <version>6.8.0</version> </dependency> <dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-storage</artifactId> <version>1.74.0</version> </dependency>

df.assign

您也可以分配给系列,因此必须首先将每个列的结果放入系列中。那可能很简单:

df = pd.DataFrame({'x': [1, 2, 3], 'y': [4, 5, 6]})
df.assign(temp1=0, temp2=5)
#    x  y  temp1  temp2
# 0  1  4      0      5
# 1  2  5      0      5
# 2  3  6      0      5