相关疑难解决方法(0)

iterrows有性能问题吗?

我注意到从熊猫使用iterrows时性能非常差.

这是其他人经历过的事情吗?它是否特定于iterrows,并且对于特定大小的数据(我正在使用2-3百万行),是否应该避免此功能?

关于GitHub的讨论使我相信它是在数据帧中混合dtypes时引起的,但是下面的简单示例表明它甚至在使用一个dtype(float64)时也存在.我的机器需要36秒:

import pandas as pd
import numpy as np
import time

s1 = np.random.randn(2000000)
s2 = np.random.randn(2000000)
dfa = pd.DataFrame({'s1': s1, 's2': s2})

start = time.time()
i=0
for rowindex, row in dfa.iterrows():
    i+=1
end = time.time()
print end - start
Run Code Online (Sandbox Code Playgroud)

为什么矢量化操作如此快速应用?我想也必须有一些逐行迭代.

在我的情况下,我无法弄清楚如何不使用iterrows(这将为将来的问题保存).因此,如果您一直能够避免这种迭代,我将不胜感激.我正在基于单独数据帧中的数据进行计算.谢谢!

---编辑:我想要运行的简化版本已添加到下面---

import pandas as pd
import numpy as np

#%% Create the original tables
t1 = {'letter':['a','b'],
      'number1':[50,-10]}

t2 = {'letter':['a','a','b','b'],
      'number2':[0.2,0.5,0.1,0.4]}

table1 = pd.DataFrame(t1)
table2 = pd.DataFrame(t2)

#%% Create the body of the …
Run Code Online (Sandbox Code Playgroud)

python iteration performance pandas

82
推荐指数
5
解决办法
3万
查看次数

为什么nandy函数在pandas系列/数据帧上如此缓慢?

考虑一个小型MWE,取自另一个问题:

DateTime                Data
2017-11-21 18:54:31     1
2017-11-22 02:26:48     2
2017-11-22 10:19:44     3
2017-11-22 15:11:28     6
2017-11-22 23:21:58     7
2017-11-28 14:28:28    28
2017-11-28 14:36:40     0
2017-11-28 14:59:48     1
Run Code Online (Sandbox Code Playgroud)

目标是剪切所有值的上限为1.我的答案使用np.clip,这很好.

np.clip(df.Data, a_min=None, a_max=1)
array([1, 1, 1, 1, 1, 1, 0, 1])
Run Code Online (Sandbox Code Playgroud)

要么,

np.clip(df.Data.values, a_min=None, a_max=1)
array([1, 1, 1, 1, 1, 1, 0, 1])
Run Code Online (Sandbox Code Playgroud)

两者都返回相同的答案.我的问题是关于这两种方法的相对表现.考虑 -

df = pd.concat([df]*1000).reset_index(drop=True)

%timeit np.clip(df.Data, a_min=None, a_max=1)
1000 loops, best of 3: 270 µs per loop

%timeit np.clip(df.Data.values, a_min=None, a_max=1)
10000 loops, best …
Run Code Online (Sandbox Code Playgroud)

python performance numpy pandas

38
推荐指数
4
解决办法
2275
查看次数

Python Pandas将列表列表的列扩展为两个新列

我有一个看起来像这样的DF。

name    id  apps
john    1   [[app1, v1], [app2, v2], [app3,v3]]
smith   2   [[app1, v1], [app4, v4]]
Run Code Online (Sandbox Code Playgroud)

我想扩展“应用程序”列,使其看起来像这样。

name    id  app_name    app_version
john    1   app1        v1
john    1   app2        v2
john    1   app3        v3
smith   2   app1        v1
smith   2   app4        v4
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏

python list pandas

10
推荐指数
1
解决办法
909
查看次数

熊猫:将不等长度的列表拆分成多列

我有一个Pandas数据框,如下所示:

                   codes
1                  [71020]
2                  [77085]
3                  [36415]
4                  [99213, 99287]
5                  [99233, 99233, 99233]
Run Code Online (Sandbox Code Playgroud)

我正在尝试将列表拆分df['codes']为列,如下所示:

                   code_1      code_2      code_3   
1                  71020
2                  77085
3                  36415
4                  99213       99287
5                  99233       99233       99233
Run Code Online (Sandbox Code Playgroud)

其中没有值的列(因为列表不长)只有空格或NaN或其他东西.

我已经看到像这样的答案和其他类似的答案,虽然它们在相同长度的列表上工作,但当我尝试在不等长度的列表上使用这些方法时,它们都会抛出错误.这有什么好办法吗?

python pandas

9
推荐指数
2
解决办法
4387
查看次数

将数据框列中的列表拆分为多列

我有一个 Pandas DataFrame 列,列表中有多个列表。像这样的东西:

df
     col1
0    [[1,2], [2,3]]
1    [[a,b], [4,5], [x,y]] 
2    [[6,7]]
Run Code Online (Sandbox Code Playgroud)

我想将列表拆分为多列,因此输出应类似于:

    col1    col2     col3
0   [1,2]   [2,3]   
1   [a,b]   [4,5]    [x,y]
2   [6,7]
Run Code Online (Sandbox Code Playgroud)

请帮我解决一下这个。提前致谢

python pandas

6
推荐指数
2
解决办法
5566
查看次数

如何在Python中将一系列列表转换为数据帧?

我有以下格式的数据框

student   marks
a         [12,12,34]
b         [34,35]
c         [23,45,23]
Run Code Online (Sandbox Code Playgroud)

我希望它转换为如下所示

student marks_1  marks_2 marks_3
a       12        12      34
b       34        35      Nan
c       23        45      23
Run Code Online (Sandbox Code Playgroud)

如何实现这一目标?请提供任何帮助

python series dataframe pandas

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

将dict的pandas数据框列展开为数据框列

我有一个 Pandas DataFrame,其中一列是一系列 dicts,如下所示:

   colA  colB                                  colC
0     7     7  {'foo': 185, 'bar': 182, 'baz': 148}
1     2     8  {'foo': 117, 'bar': 103, 'baz': 155}
2     5    10  {'foo': 165, 'bar': 184, 'baz': 170}
3     3     2  {'foo': 121, 'bar': 151, 'baz': 187}
4     5     5  {'foo': 137, 'bar': 199, 'baz': 108}
Run Code Online (Sandbox Code Playgroud)

我希望来自 dicts的foo,barbaz键值对成为我数据框中的列,这样我就得到了这样的结果:

   colA  colB  foo  bar  baz
0     7     7  185  182  148
1     2     8  117  103  155
2     5    10 …
Run Code Online (Sandbox Code Playgroud)

python dictionary series dataframe pandas

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

将应用(多个输出)的结果添加到具有列名的现有 DataFrame 的更好方法

我正在熊猫数据框的行上应用一个函数。该函数返回四个值(即每行四个值)。实际上,这意味着从 apply 函数返回的对象是一个包含元组的系列。我想将这些添加到他们自己的列中。我知道我可以将该输出转换为 DataFrame,然后与旧的 DataFrame 连接,如下所示:

import pandas as pd


def some_func(i):
    return i+1, i+2, i+3, i+4

df = pd.DataFrame(range(10), columns=['start'])
res = df.apply(lambda row: some_func(row['start']), axis=1)

# convert to df and add column names
res_df = res.apply(pd.Series)
res_df.columns = ['label_1', 'label_2', 'label_3', 'label_4']

# concatenate with old df
df = pd.concat([df, res_df], axis=1)
print(df)
Run Code Online (Sandbox Code Playgroud)

我的问题是是否有更好的方法来做到这一点?特别是res.apply(pd.Series)似乎多余的,但我不知道更好的选择。性能对我来说是一个重要因素。


根据要求,示例输入 DataFrame 可能如下所示

   start
0      0
1      1
2      2
3      3
4      4
5      5
6      6
7      7
8      8 …
Run Code Online (Sandbox Code Playgroud)

python apply dataframe pandas

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

迭代 Pandas 数据框中的列表元素 - 每个条目都有不同的大小,并且需要为列表中的每个条目生成一个新列

我有一个数据框

在此处输入图片说明

在这里,我有一个名为“名称拆分”的列,它是一个包含列表的列。现在我想拆分列表的内容并为每个列表创建单独的列。

这是我迄今为止尝试过的:

df = pd.read_csv("C:/Users/Transorg-PC/Desktop/Training/py/datase/football.csv")

temp = df.copy()

temp['name'] = temp['name'].apply(lambda x: ' '.join(x.split()))

temp['name split'] = temp['name'].apply(lambda x: x.split())

temp['length'] = temp['name split'].str.len()

for i in range(temp['length'].max()-1):
    temp[i] = temp['name split'].apply(lambda x:x[i])
Run Code Online (Sandbox Code Playgroud)

但是我无法像这样迭代,因为在某些情况下索引超出范围。那么如何在单独的列中拆分列表的内容。

python dataframe pandas

4
推荐指数
1
解决办法
6178
查看次数

如何提取/拆分数据框中的列表列以分隔唯一的列?

我有一个包含几列的数据框,如下所示:

              Age                         G                      GS 
INDEX1  [27, 25, 22, 30, 30]    [76, 79, 80, 76, 77]    [76, 79, 80, 76, 77]    
INDEX2  [24, 23, 21, 32, 34]    [77, 76, 81, 75, 77]    [77, 76, 81, 75, 77]    
Run Code Online (Sandbox Code Playgroud)

我如何将所有列表拆分为各自独立的列?理想情况下,完成后我的数据框将如下所示:

       Age   Age1  Age2   Age3   Age4   G    G1   G2   G3   G4
INDEX1  27    25    22     30     30    76   79   80   76   77  ...
... 
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我确实将字典转换为这个数据框。我曾尝试在堆栈上搜索和实施几种不同的类似解决方案,但似乎都没有奏效。此解决方案正确转换,但由于某种原因创建了两个 NaN 列。如果有人知道如何在整个数据帧上执行此操作,我可以删除额外的 NaN 列:

df1 = pd.DataFrame(converted['Age'].values.tolist())
df1


    0   1   2   3    4       5   6
0   27  25  22 …
Run Code Online (Sandbox Code Playgroud)

python split list dataframe pandas

4
推荐指数
1
解决办法
95
查看次数

标签 统计

pandas ×10

python ×10

dataframe ×5

list ×2

performance ×2

series ×2

apply ×1

dictionary ×1

iteration ×1

numpy ×1

split ×1