相关疑难解决方法(0)

使用*args和**kwargs

所以我有这个概念的困难*args**kwargs.

到目前为止,我已经了解到:

  • *args =参数列表 - 作为位置参数
  • **kwargs = dictionary - 其键成为单独的关键字参数,值成为这些参数的值.

我不明白这会对哪些编程任务有所帮助.

也许:

我想输入列表和字典作为函数AND的参数同时作为通配符,所以我可以传递任何参数?

有一个简单的例子来说明如何*args**kwargs使用?

我发现的教程也使用了"*"和变量名.

*args**kwargs刚才占位符或者你使用完全相同*args,并**kwargs在代码中?

python args kwargs

1367
推荐指数
10
解决办法
84万
查看次数

使用pandas循环数据帧的最有效方法是什么?

我希望以顺序方式对数据框中的财务数据执行我自己的复杂操作.

例如,我使用从Yahoo Finance获取的以下MSFT CSV文件:

Date,Open,High,Low,Close,Volume,Adj Close
2011-10-19,27.37,27.47,27.01,27.13,42880000,27.13
2011-10-18,26.94,27.40,26.80,27.31,52487900,27.31
2011-10-17,27.11,27.42,26.85,26.98,39433400,26.98
2011-10-14,27.31,27.50,27.02,27.27,50947700,27.27

....
Run Code Online (Sandbox Code Playgroud)

然后我做以下事情:

#!/usr/bin/env python
from pandas import *

df = read_csv('table.csv')

for i, row in enumerate(df.values):
    date = df.index[i]
    open, high, low, close, adjclose = row
    #now perform analysis on open/close based on date, etc..
Run Code Online (Sandbox Code Playgroud)

这是最有效的方式吗?鉴于对熊猫速度的关注,我认为必须有一些特殊的函数来迭代遍历值,同时也检索索引(可能通过生成器来节省内存)?df.iteritems遗憾的是,只能逐列迭代.

python performance for-loop dataframe pandas

306
推荐指数
10
解决办法
41万
查看次数

Pandas:在数据框中创建两个新列,其中的值是根据预先存在的列计算的

我正在使用pandas库,我想在df具有n列(n> 0)的数据帧中添加两个新列.
这些新列是将函数应用于数据框中的一列的结果.

要应用的功能如下:

def calculate(x):
    ...operate...
    return z, y
Run Code Online (Sandbox Code Playgroud)

为仅返回值的函数创建新列的一种方法是:

df['new_col']) = df['column_A'].map(a_function)
Run Code Online (Sandbox Code Playgroud)

所以,我想要的,并尝试不成功(*),是这样的:

(df['new_col_zetas'], df['new_col_ys']) = df['column_A'].map(calculate)
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?我没有任何线索扫描文档.

**df['column_A'].map(calculate)返回一个pandas系列,每个项目由一个元组z,y组成.并尝试将其分配给两个dataframe列会产生ValueError.*

python pandas

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

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

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

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

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

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

python iteration list-comprehension vectorization pandas

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

从apply pandas返回多个列

我有一个pandas DataFrame , df_test. 它包含一个列'size',表示以字节为单位的大小.我使用以下代码计算了KB,MB和GB:

df_test = pd.DataFrame([
    {'dir': '/Users/uname1', 'size': 994933},
    {'dir': '/Users/uname2', 'size': 109338711},
])

df_test['size_kb'] = df_test['size'].astype(int).apply(lambda x: locale.format("%.1f", x / 1024.0, grouping=True) + ' KB')
df_test['size_mb'] = df_test['size'].astype(int).apply(lambda x: locale.format("%.1f", x / 1024.0 ** 2, grouping=True) + ' MB')
df_test['size_gb'] = df_test['size'].astype(int).apply(lambda x: locale.format("%.1f", x / 1024.0 ** 3, grouping=True) + ' GB')

df_test


             dir       size       size_kb   size_mb size_gb
0  /Users/uname1     994933      971.6 KB    0.9 MB  0.0 GB
1  /Users/uname2  109338711  106,776.1 KB  104.3 MB …
Run Code Online (Sandbox Code Playgroud)

python pandas

63
推荐指数
8
解决办法
4万
查看次数

如何解决 KeyError: u"[Index([..], dtype='object')] 不在 [columns] 中"

我正在尝试根据我在 github here 中找到的内容创建 SVM 模型,但它一直返回此错误。

Traceback (most recent call last):
  File "C:\Users\Me\Documents\#e\projects\Sign-Language-Glove-master\modeling.py", line 22, in <module>
    train_features = train[['F1','F2','F3','F4','F5','X','Y','Z','C1','C2']]
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2934, in __getitem__
    raise_missing=True)
  File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 1354, in _convert_to_indexer
    return self._get_listlike_indexer(obj, axis, **kwargs)[1]
  File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 1161, in _get_listlike_indexer
    raise_missing=raise_missing)
  File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 1246, in _validate_read_indexer
    key=key, axis=self.obj._get_axis_name(axis)))
KeyError: u"None of [Index([u'F1', u'F2', u'F3', u'F4', u'F5', u'X', u'Y', u'Z', u'C1', u'C2'], dtype='object')] are in the [columns]"
Run Code Online (Sandbox Code Playgroud)

这是我的代码。

import pandas as pd
dataframe= pd.read_csv("lettera.csv", delimiter=',')
df=pd.DataFrame(dataframe) …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

Pandas 适用于多列输出的滚动

我正在编写一个代码,它将滚动窗口应用于将返回多列的函数。

输入:Pandas Series
预期输出:3 列 DataFrame

def fun1(series, ):
    # Some calculations producing numbers a, b and c
    return {"a": a, "b": b, "c": c} 

res.rolling('21 D').apply(fun1)
Run Code Online (Sandbox Code Playgroud)

资源内容:

time
2019-09-26 16:00:00    0.674969
2019-09-26 16:15:00    0.249569
2019-09-26 16:30:00   -0.529949
2019-09-26 16:45:00   -0.247077
2019-09-26 17:00:00    0.390827
                         ...   
2019-10-17 22:45:00    0.232998
2019-10-17 23:00:00    0.590827
2019-10-17 23:15:00    0.768991
2019-10-17 23:30:00    0.142661
2019-10-17 23:45:00   -0.555284
Length: 1830, dtype: float64
Run Code Online (Sandbox Code Playgroud)

错误:

TypeError: must be real number, not dict
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  • 在 apply 中更改 raw=True
  • 在 apply 中使用 …

python dataframe pandas rolling-computation

7
推荐指数
1
解决办法
4104
查看次数

熊猫应用函数返回两个新列

我有一个pandas数据框,我想在上面使用Apply函数根据现有数据生成两个新列。我收到此错误: ValueError: Wrong number of items passed 2, placement implies 1

import pandas as pd
import numpy as np

def myfunc1(row):
    C = row['A'] + 10
    D = row['A'] + 50
    return [C, D]

df = pd.DataFrame(np.random.randint(0,10,size=(2, 2)), columns=list('AB'))

df['C', 'D'] = df.apply(myfunc1 ,axis=1)
Run Code Online (Sandbox Code Playgroud)

启动DF:

   A  B
0  6  1
1  8  4
Run Code Online (Sandbox Code Playgroud)

所需DF:

   A  B  C   D
0  6  1  16  56
1  8  4  18  58
Run Code Online (Sandbox Code Playgroud)

python python-2.7 pandas

4
推荐指数
3
解决办法
3546
查看次数

Dataframe Apply方法返回多个元素(系列)

import pandas as pd
Run Code Online (Sandbox Code Playgroud)

假设我dataframe喜欢这样:

df = pd.DataFrame({"a":range(4),"b":range(1,5)})
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

   a  b
0  0  1
1  1  2
2  2  3
3  3  4
Run Code Online (Sandbox Code Playgroud)

以及将X乘以Y的函数:

def XtimesY(x,y):
    return x*y
Run Code Online (Sandbox Code Playgroud)

如果我想添加一个新的熊猫系列,我可以这样做:

df["c"] =df.apply( lambda x:XtimesY(x["a"],2), axis =1)
Run Code Online (Sandbox Code Playgroud)

有用 !

现在我要添加多个系列:

我有这个功能:

def divideAndMultiply(x,y):
    return x/y, x*y
Run Code Online (Sandbox Code Playgroud)

像这样的东西?:

df["e"], df["f"] = df.apply( lambda x: divideAndMultiply(x["a"],2) , axis =1)
Run Code Online (Sandbox Code Playgroud)

它不起作用!

我希望'e'列接收分区并将'f'乘法列列出来!

注意:这不是我正在使用的代码,但我期待相同的行为.

python dataframe python-2.7 pandas

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