相关疑难解决方法(0)

对于有熊猫的循环 - 我什么时候应该关心?

我熟悉"矢量化"的概念,以及熊猫如何使用矢量化技术来加速计算.矢量化函数在整个系列或DataFrame上广播操作,以实现比传统迭代数据更大的加速.

但是,我很惊讶地看到很多代码(包括Stack Overflow的答案)提供了解决问题的方法,这些问题涉及使用for循环和列表推导来循环数据.阅读完文档后,对API有了不错的理解,我认为循环是"坏的",并且应该"永远"迭代数组,系列或DataFrame.那么,为什么我会不时地看到用户提出循环解决方案呢?

因此,要总结......我的问题是:
是否for循环真正的"坏"?如果不是,在什么情况下它们会比使用更传统的"矢量化"方法更好?1

1 - 虽然这个问题确实听起来有点宽泛,但事实是,当for循环通常比传统的迭代数据更好时,存在非常具体的情况.这篇文章旨在为后人捕捉这一点.

python iteration list-comprehension vectorization pandas

85
推荐指数
2
解决办法
7819
查看次数

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万
查看次数

什么是时间测试熊猫和numpy相关解决方案的简单框架

动机

我在这里和那里回答几个问题.我经常测试我和其他人的解决方案有多快.

是否有一个简单的框架来全面了解各种解决方案的速度有多快?

考虑数据帧 df

df = pd.DataFrame({
        'Group': list('QLCKPXNLNTIXAWYMWACA'),
        'Value': [29, 52, 71, 51, 45, 76, 68, 60, 92, 95,
                  99, 27, 77, 54, 39, 23, 84, 37, 99, 87]
    })
Run Code Online (Sandbox Code Playgroud)

我想总结Value按不同值分组的列Group.我有三种方法可以做到这一点.

import pandas as pd
import numpy as np
from numba import njit


def sum_pd(df):
    return df.groupby('Group').Value.sum()

def sum_fc(df):
    f, u = pd.factorize(df.Group.values)
    v = df.Value.values
    return pd.Series(np.bincount(f, weights=v).astype(int), pd.Index(u, name='Group'), name='Value').sort_index()

@njit
def wbcnt(b, w, k):
    bins = np.arange(k)
    bins = …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

21
推荐指数
3
解决办法
561
查看次数

在Python中绘制数据框中的烛台数据

我想从使用熊猫从雅虎下载的数据创建每日烛台图.在这种情况下,我无法弄清楚如何使用烛台matplotlib函数.这是代码:

#The following example, downloads stock data from Yahoo and plots it.
from pandas.io.data import get_data_yahoo
import matplotlib.pyplot as plt

from matplotlib.pyplot import subplots, draw
from matplotlib.finance import candlestick

symbol = "GOOG"

data = get_data_yahoo(symbol, start = '2013-9-01', end = '2013-10-23')[['Open','Close','High','Low','Volume']]

ax = subplots()

candlestick(ax,data['Open'],data['High'],data['Low'],data['Close'])
Run Code Online (Sandbox Code Playgroud)

谢谢

安德鲁.

candlestick-chart

7
推荐指数
3
解决办法
2万
查看次数

将在 Python 中创建的 Pandas 数据框插入 SQL Server

如前所述,我在 Python 中创建了一个数据集合(40k 行,5 列),我想将其插入回 SQL Server 表中。

通常,在 SQL 中,我会'select * into myTable from dataTable'调用执行插入操作,但是位于 Pandas 数据帧中的数据显然使这变得复杂。

我并不正式反对使用 SQLAlchemy(尽管更愿意避免再次下载和安装),但更喜欢在 Python 中本地执行此操作,并且我使用 pyodbc 连接到 SSMS。

有没有一种直接的方法可以避免循环(即逐行插入)?

sql-server pyodbc python-3.x pandas

6
推荐指数
1
解决办法
8776
查看次数

如何将带有索引的选定列转换为熊猫中的元组列表

鉴于以下数据框:

df = pd.DataFrame([{'Name': 'Chris', 'Item Purchased': 'Sponge', 'Cost': 22.50},
                   {'Name': 'Kevyn', 'Item Purchased': 'Kitty Litter', 'Cost': 2.50},
                   {'Name': 'Filip', 'Item Purchased': 'Spoon', 'Cost': 5.00}],
                  index=['Store 1', 'Store 1', 'Store 2'])
Run Code Online (Sandbox Code Playgroud)

如何编写脚本以生成以下输出:

[('Store 1', 22.5), ('Store 1', 2.5), ('Store 2', 5.0)]
Run Code Online (Sandbox Code Playgroud)

python pandas

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

将pandas数据帧转换为带索引的元组列表

我正在尝试将pandas数据帧转换为元组列表.但是我在获取元组中的值的索引(即日期)时遇到了困难.我的第一步是去这里,但他们没有为元组添加任何索引.

Pandas将数据帧转换为元组数组

我唯一的问题是访问numpy数组中每一行的索引.我有一个如下所示的解决方案,但它使用了一个额外的计数器indexCounter,它看起来很草率.我觉得应该有一个更优雅的解决方案来从特定的numpy数组中检索索引.

def get_Quandl_daily_data(ticker, start, end):
prices = []
symbol = format_ticker(ticker)


try:
    data = quandl.get("WIKI/" + symbol, start_date=start, end_date=end)
except Exception, e:
    print "Could not download QUANDL data: %s" % e

subset = data[['Open','High','Low','Close','Adj. Close','Volume']]

indexCounter = 0
for row in subset.values:
    dateIndex = subset.index.values[indexCounter]
    tup = (dateIndex, "%.4f" % row[0], "%.4f" % row[1], "%.4f" % row[2], "%.4f" % row[3], "%.4f" % row[4],row[5])
    prices.append(tup)
    indexCounter += 1
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

python tuples numpy pandas

3
推荐指数
1
解决办法
4499
查看次数

将数据帧转换为元组列表

我有一个像这样的python pandas dataframe df:

a  b
1  3
3  6
5  7
6  4
7  8
Run Code Online (Sandbox Code Playgroud)

我想将其转移到列表中:

[(1,3),(3,6),(5,7),(6,4),(7,8)]
Run Code Online (Sandbox Code Playgroud)

谢谢.

python list dataframe pandas

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