相关疑难解决方法(0)

如何在pandas DataFrame中删除(爆炸)列?

我有以下DataFrame,其中一列是一个对象(列表类型单元格):

df=pd.DataFrame({'A':[1,2],'B':[[1,2],[1,2]]})
df
Out[458]: 
   A       B
0  1  [1, 2]
1  2  [1, 2]
Run Code Online (Sandbox Code Playgroud)

我的预期输出是:

   A  B
0  1  1
1  1  2
3  2  1
4  2  2
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能做到这一点?


相关问题

pandas:当单元格内容是列表时,为列表中的每个元素创建一行

好的问题和答案,但只处理一列列表(在我的回答中,自我修复功能将适用于多列,也接受的答案是使用最耗时apply,不推荐,检查更多信息我应该什么时候想要在我的代码中使用pandas apply()?)

python dataframe pandas

76
推荐指数
5
解决办法
1万
查看次数

我什么时候应该在我的代码中使用pandas apply()?

这是一个自我回答的QnA,旨在指导用户应用的缺陷和好处.

我已经看到很多关于Stack Overflow问题的答案涉及使用apply.我也看到用户评论他们说" apply很慢",应该避免".

我已经阅读了很多关于性能主题的文章,解释apply很慢.我还在文档中看到了一个关于如何apply简单地传递UDF的便利函数的免责声明(现在似乎无法找到).因此,普遍的共识是,apply如果可能,应该避免.但是,这引发了以下问题:

  1. 如果apply是如此糟糕,那为什么它在API中呢?
  2. 我应该如何以及何时制作我的代码apply- 免费?
  3. 是否有过任何地方的情况apply不错的(比其他可能的解决方案更好)?

python performance apply pandas

68
推荐指数
3
解决办法
8380
查看次数

在pandas数据帧中将单元格拆分为多行

我有一个包含订单数据的数据框,每个订单都有多个包存储为逗号分隔的字符串[ package&package_code]列

我想分割包数据并为每个包创建一行,包括其订单详细信息

以下是输入数据框的示例:

import pandas as pd
df = pd.DataFrame({"order_id":[1,3,7],"order_date":["20/5/2018","22/5/2018","23/5/2018"], "package":["p1,p2,p3","p4","p5,p6"],"package_code":["#111,#222,#333","#444","#555,#666"]})
Run Code Online (Sandbox Code Playgroud)

输入数据帧

这就是我想要实现的输出: 产量

我怎么能用熊猫做到这一点?

python dataframe pandas

21
推荐指数
5
解决办法
1万
查看次数

如何在熊猫中进行'侧视爆炸()'

我想做这个 :

# input:
        A   B
0  [1, 2]  10
1  [5, 6] -20
# output:
   A   B
0  1  10
1  2  10
2  5 -20
3  6 -20
Run Code Online (Sandbox Code Playgroud)

每列A的值都是一个列表

df = pd.DataFrame({'A':[[1,2],[5,6]],'B':[10,-20]})
df = pd.DataFrame([[item]+list(df.loc[line,'B':]) for line in df.index for item in df.loc[line,'A']],
                  columns=df.columns)
Run Code Online (Sandbox Code Playgroud)

上面的代码可以工作,但速度很慢

有什么聪明的方法吗?

谢谢

python pandas

11
推荐指数
1
解决办法
4274
查看次数

将包含列表的列拆分为熊猫中的不同行

我在熊猫中有一个像这样的数据框:

id     info
1      [1,2]
2      [3]
3      []
Run Code Online (Sandbox Code Playgroud)

我想把它分成不同的行,如下所示:

id     info
1      1 
1      2 
2      3 
3      NaN
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

python dataframe pandas

9
推荐指数
1
解决办法
9923
查看次数

在pandas DataFrame中取消(爆炸)多个列表列的有效方法

我正在将多个JSON对象读入一个DataFrame.问题是某些列是列表.此外,数据非常大,因此我不能使用互联网上的可用解决方案.它们非常慢并且内存效率低

以下是我的数据的样子:

df = pd.DataFrame({'A': ['x1','x2','x3', 'x4'], 'B':[['v1','v2'],['v3','v4'],['v5','v6'],['v7','v8']], 'C':[['c1','c2'],['c3','c4'],['c5','c6'],['c7','c8']],'D':[['d1','d2'],['d3','d4'],['d5','d6'],['d7','d8']], 'E':[['e1','e2'],['e3','e4'],['e5','e6'],['e7','e8']]})
    A       B          C           D           E
0   x1  [v1, v2]    [c1, c2]    [d1, d2]    [e1, e2]
1   x2  [v3, v4]    [c3, c4]    [d3, d4]    [e3, e4]
2   x3  [v5, v6]    [c5, c6]    [d5, d6]    [e5, e6]
3   x4  [v7, v8]    [c7, c8]    [d7, d8]    [e7, e8]
Run Code Online (Sandbox Code Playgroud)

这是我的数据形状:(441079,12)

我想要的输出是:

    A       B          C           D           E
0   x1      v1         c1         d1          e1
0   x1      v2         c2         d2          e2
1   x2      v3         c3         d3          e3 …
Run Code Online (Sandbox Code Playgroud)

python json dataframe pandas

6
推荐指数
5
解决办法
3376
查看次数

Pandas:将一行的多列连接到多行(1:n)

我有一个包含许多键/值列的数据框,而键和值是分隔的列.

import pandas as pd

values = [['John', 'somekey1', 'somevalue1', 'somekey2', 'somevalue2']]
df = pd.DataFrame(values, columns=['name', 'key1', 'value1', 'key2', 'value2'])
Run Code Online (Sandbox Code Playgroud)

备注:原始数据将包含更多前面的列,而不仅仅是名称.它不仅仅包含两个键/值列.

我想要实现的是这样的结果:

values = [
    ['John', 'somekey1', 'somevalue1'],
    ['John', 'somekey2', 'somevalue2']
]
df = pd.DataFrame(values, columns=['name', 'key', 'value'])
Run Code Online (Sandbox Code Playgroud)

在那里,我想将所有键/值列连接到列表或字典中,而不是爆炸该列表/字典.我在pd.melt上找到了这个不错的帖子,但我的问题是,我不知道确切的id_var列在前面.因此我尝试了pd.Series.stack,它为键/值列提供了正确的结果,但是缺少原始数据中的其他列.任何的想法?这是我试过的:

# generates: [(somekey1, somevalue1), (somekey2, somevalue2)]
df['pairs'] = df.apply(lambda row: [(row['key1'],row['value1']), (row['key2'], row['value2'])], axis=1)
# unstacks the list, but drops all other columns
df['pairs'].apply(pd.Series).stack().reset_index(drop=True).to_frame('pairs')
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

0
推荐指数
1
解决办法
525
查看次数

标签 统计

pandas ×7

python ×7

dataframe ×5

apply ×1

json ×1

performance ×1