当使用具有以下数据帧的多个列时,我在使用Pandas应用函数时遇到一些问题
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
Run Code Online (Sandbox Code Playgroud)
以及以下功能
def my_test(a, b):
return a % b
Run Code Online (Sandbox Code Playgroud)
当我尝试应用此功能时:
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
NameError: ("global name 'a' is not defined", u'occurred at index 0')
Run Code Online (Sandbox Code Playgroud)
我不明白这个消息,我正确地定义了这个名字.
我非常感谢你对这个问题的任何帮助
更新
谢谢你的帮助.我确实用代码做了一些语法错误,索引应该放''.但是我使用更复杂的功能仍然存在同样的问题,例如:
def my_test(a):
cum_diff = 0
for ix in df.index():
cum_diff = cum_diff + (a - df['a'][ix])
return cum_diff
Run Code Online (Sandbox Code Playgroud)
谢谢
我非常喜欢这个requests
包及其处理JSON响应的舒适方式.
不幸的是,我不明白我是否也可以处理XML响应.有没有人体验如何使用requests
包处理XML响应?是否有必要包含另一个包,例如requests
XML解码?
我在查看以下内容时遇到问题DataFrame
:
n = 100
foo = DataFrame(index=range(n))
foo['floats'] = np.random.randn(n)
foo
Run Code Online (Sandbox Code Playgroud)
问题是它不会在ipython笔记本中默认打印所有行,但我必须切片才能查看生成的行.即使以下选项也不会更改输出:
pd.set_option('display.max_rows', 500)
Run Code Online (Sandbox Code Playgroud)
有谁知道如何显示整个阵列?
我需要逐行比较两个不同大小的数据帧并打印出不匹配的行.让我们采取以下两点:
df1 = DataFrame({
'Buyer': ['Carl', 'Carl', 'Carl'],
'Quantity': [18, 3, 5, ]})
df2 = DataFrame({
'Buyer': ['Carl', 'Mark', 'Carl', 'Carl'],
'Quantity': [2, 1, 18, 5]})
Run Code Online (Sandbox Code Playgroud)
什么是在df2上逐行排列并打印不在df1中的行的最有效方法,例如:
Buyer Quantity
Carl 2
Mark 1
Run Code Online (Sandbox Code Playgroud)
重要提示:我不想要排:
Buyer Quantity
Carl 3
Run Code Online (Sandbox Code Playgroud)
包含在差异中:
我已经尝试过: 逐行比较两个不同长度的数据帧,并为每行添加相同值的列, 并将两个Pandas数据帧中的输出差异并排显示 - 突出显示差异
但这些与我的问题不符.
谢谢
安迪
我目前正在使用python请求包来发出JSON请求.不幸的是,我需要查询的服务有每日最大请求限制.对,我知道,我缓存了已执行的请求网址,所以如果我超出这个限制,我知道第二天该在哪里继续.
r = requests.get('http://someurl.com', params=request_parameters)
log.append(r.url)
Run Code Online (Sandbox Code Playgroud)
但是,为了使用这个日志,第二天我需要在实际执行请求之前在我的程序中创建请求URL,这样我就可以将它们与日志中的字符串进行匹配.否则,它会降低我的每日限额.你有谁知道怎么做?我在请求包中找不到任何适当的方法.
如何在pandas Series对象中检索特定值的labe:
例如:
labels = ['a', 'b', 'c', 'd', 'e']
s = Series (arange(5) * 4 , labels)
Run Code Online (Sandbox Code Playgroud)
哪个系列产品:
a 0
b 4
c 8
d 12
e 16
dtype: int64
Run Code Online (Sandbox Code Playgroud)
如何获得价值'12'的标签?谢谢
我有以下DataFrame:
df = pd.DataFrame({
'Branch' : 'A A A A A B'.split(),
'Buyer': 'Carl Mark Carl Joe Joe Carl'.split(),
'Quantity': [1,3,5,8,9,3],
'Date' : [
DT.datetime(2013,1,1,13,0),
DT.datetime(2013,1,1,13,5),
DT.datetime(2013,10,1,20,0),
DT.datetime(2013,10,2,10,0),
DT.datetime(2013,12,2,12,0),
DT.datetime(2013,12,2,14,0),
]})
from pandas.tseries.resample import TimeGrouper
Run Code Online (Sandbox Code Playgroud)
如何使用TimeGrouper在分支机构和20天内对这些数据进行分组?
我以前的所有尝试都失败了,因为我无法将TimeGrouper与groupby函数中的另一个参数组合在一起.
我非常感谢你的帮助.
谢谢
安迪
使用DataFrame的子集进行iterrows的最佳方法是什么?
我们来看以下简单示例:
import pandas as pd
df = pd.DataFrame({
'Product': list('AAAABBAA'),
'Quantity': [5,2,5,10,1,5,2,3],
'Start' : [
DT.datetime(2013,1,1,9,0),
DT.datetime(2013,1,1,8,5),
DT.datetime(2013,2,5,14,0),
DT.datetime(2013,2,5,16,0),
DT.datetime(2013,2,8,20,0),
DT.datetime(2013,2,8,16,50),
DT.datetime(2013,2,8,7,0),
DT.datetime(2013,7,4,8,0)]})
df = df.set_index(['Start'])
Run Code Online (Sandbox Code Playgroud)
现在我想使用itterrows函数修改此DataFrame的子集,例如:
for i, row_i in df[df.Product == 'A'].iterrows():
row_i['Product'] = 'A1' # actually a more complex calculation
Run Code Online (Sandbox Code Playgroud)
但是,这些变化并不存在.
是否有可能(使用索引'i'进行手动查找除外)对原始Dataframe进行持久更改?
我有以下DataFrame与交易数据:
df = pd.DataFrame({
'Trader': 'Carl Mark Carl Joe Mark Carl Max Max'.split(),
'Quantity': [5,2,5,10,1,5,2,1],
'Date' : [
DT.datetime(2013,1,1,13,0),
DT.datetime(2013,1,1,13,5),
DT.datetime(2013,2,5,20,0),
DT.datetime(2013,2,6,10,0),
DT.datetime(2013,2,8,12,0),
DT.datetime(2013,3,7,14,0),
DT.datetime(2013,6,4,14,0),
DT.datetime(2013,7,4,14,0),
]})
df.index = [df.Date, df.Trader]
Run Code Online (Sandbox Code Playgroud)
我希望计算每个交易者的平均订单量的每周统计数据.为此,我目前正在卸载交易者列并使用以下方式重新采样数据:
df.unstack('Trader').resample('1W', how='mean').fillna(0)
Run Code Online (Sandbox Code Playgroud)
是否有可能为每个交易者编制一个具有交易量趋势函数的列(最好是基于交易者先前交易的指数平滑函数)?
谢谢
安迪
我正在寻找输出Python中两个数组的第一个差异的索引的最快方法.例如,让我们采用以下两个数组:
test1 = [1, 3, 5, 8]
test2 = [1]
test3 = [1, 3]
Run Code Online (Sandbox Code Playgroud)
比较test1
和test2
,我想输出1
,而test1和test3的比较应该输出2
.
换句话说,我寻找相当于声明:
import numpy as np
np.where(np.where(test1 == test2, test1, 0) == '0')[0][0]
Run Code Online (Sandbox Code Playgroud)
具有不同的阵列长度.
任何帮助表示赞赏.
我有以下DataFrame:
df = pd.DataFrame({
'Trader': 'Carl Mark Carl Joe Joe Carl Joe Carl'.split(),
'Product': list('AAAABBAA'),
'Quantity': [5,2,5,10,1,5,2,3],
'Start' : [
DT.datetime(2013,1,1,9,0),
DT.datetime(2013,1,1,8,5),
DT.datetime(2013,2,5,14,0),
DT.datetime(2013,2,5,16,0),
DT.datetime(2013,2,8,20,0),
DT.datetime(2013,2,8,16,50),
DT.datetime(2013,2,8,7,0),
DT.datetime(2013,7,4,8,0)]})
Run Code Online (Sandbox Code Playgroud)
当我尝试通过以下方式输入索引时:
df = df.set_index([df.Start, df.Trader, df.Product])
Run Code Online (Sandbox Code Playgroud)
它不会删除用于索引的列.即使我明确指定它使用:
df = df.set_index([df.Start, df.Trader, df.Product], drop=True)
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我的代码中有错误?
谢谢
安迪
我正在尝试使用statsmodles计算非线性回归模型.特别是我在学习patsy语法时遇到了问题.
是否有任何教程或示例如何使用patsy语法制定非线性模型?
特别是,如何使用patsy指定此示例中的非线性模型(http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html)?
非常感谢你提前
安迪
我想将线性模型计算的结果从 R 传递到 Excel 中的工作表。为此,我将 XLConnect 与以下代码一起使用:
x <- 1000:2000
y <- 3*x+rnorm(length(x))
fit <- lm(y~x-1)
result <- summary(fit)$coeff
print(result)
require(XLConnect)
wb <- loadWorkbook("/Users/andreas/test1.xls", create = TRUE)
createSheet(wb, name = "test")
writeWorksheet(wb, result, sheet = "test", startRow = 1, startCol = 1)
saveWorkbook(wb)
Run Code Online (Sandbox Code Playgroud)
但是,问题是 XLConnect 不会将系数的名称传递给 Excel(此处:x),尽管它们已正确打印出来。
有人对这个问题有想法吗?
我将不胜感激任何帮助。
安迪
python ×12
pandas ×8
dataframe ×2
api ×1
apply ×1
arrays ×1
diff ×1
excel ×1
formatting ×1
group-by ×1
httprequest ×1
indexing ×1
loops ×1
numpy ×1
python-2.7 ×1
r ×1
regression ×1
series ×1
statistics ×1
statsmodels ×1
subset ×1
urlencode ×1
xlconnect ×1
xml ×1