小编ℕʘʘ*_*ḆḽḘ的帖子

如何加速非常慢的熊猫应用功能?

我有一个非常大的pandas数据集,在某些时候我需要使用以下函数

def proc_trader(data):
    data['_seq'] = np.nan
    # make every ending of a roundtrip with its index
    data.ix[data.cumq == 0,'tag'] = np.arange(1, (data.cumq == 0).sum() + 1)
    # backfill the roundtrip index until previous roundtrip;
    # then fill the rest with 0s (roundtrip incomplete for most recent trades)
    data['_seq'] =data['tag'].fillna(method = 'bfill').fillna(0)
    return data['_seq']
    # btw, why on earth this function returns a dataframe instead of the series `data['_seq']`??
Run Code Online (Sandbox Code Playgroud)

我用申请

reshaped['_spell']=reshaped.groupby(['trader','stock'])[['cumq']].apply(proc_trader)
Run Code Online (Sandbox Code Playgroud)

显然,我不能在这里分享数据,但你看到我的代码中存在瓶颈吗?可能是那arange件事吗?数据中有许多name-productid组合.

最小工作范例:

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

python performance pandas

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

如何在Pandas groupby之后获得多个条件操作?

考虑以下示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
                         'foo', 'bar', 'foo', 'foo'],
                   'B' : [12,10,-2,-4,-2,5,8,7],
                   'C' : [-5,5,-20,0,1,5,4,-4]})

df
Out[12]: 
     A   B   C
0  foo  12  -5
1  bar  10   5
2  foo  -2 -20
3  bar  -4   0
4  foo  -2   1
5  bar   5   5
6  foo   8   4
7  foo   7  -4
Run Code Online (Sandbox Code Playgroud)

在这里,我需要计算,对于A中的每个组,B 条件中C中元素的总和是非负的(即> = 0,基于另一列的条件).反之亦然C.

但是,我的代码失败了.

df.groupby('A').agg({'B': lambda x: x[x.C>0].sum(),
                     'C': lambda …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

在Pandas中将数字sas日期转换为datetime

我正在使用Pandas 0.18read_sas加载sas7bdat数据集.

Pandas数据框中的日期显示为:

Out[56]: 
0    19411.0
1    19325.0
2    19325.0
3    19443.0
4    19778.0
Name: sas_date, dtype: float64
Run Code Online (Sandbox Code Playgroud)

pd.to_datetime无法识别此格式.我该怎么办才能正确解析日期?

谢谢!

python sas pandas

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

无法在Python中加载networkx中的简单csv

我是Python的完整noobie,我想使用networkx包研究数据集.我不明白这里有什么问题:

我有一个看起来像这样的csv(摘录):

['152027', '-6167']
['152027', '-4982']
['152027', '-3810']
['152027', '-2288']
['152027', '-1253']
['152100', '-152100']
['152100', '-86127']
Run Code Online (Sandbox Code Playgroud)

我们可以调用这个.csv文件nodes.数字继承人没有特别的意义.它们只是匿名的名称:所以152027是个人连接到个人-6167,个人-4982等.

我在Python中使用以下代码

import csv
import networkx as nx

file = csv.reader(open('nodes', 'rb'), delimiter=',')

G=nx.read_edgelist(file, delimiter=',',nodetype=float,encoding='utf-8')
G.number_of_nodes()
Run Code Online (Sandbox Code Playgroud)

我很难过,Out[71]: 0 我不明白这里有什么问题.请你帮助我好吗?

python csv networkx

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

从 Stargazer .tex 输出中删除 \begin{tabular}

有没有一种简单的方法可以自动删除

\begin{tabular}{@{\extracolsep{5pt}}lc}
Run Code Online (Sandbox Code Playgroud)

\end{tabular}
Run Code Online (Sandbox Code Playgroud)

Stargazer LaTeX 输出的开头和结尾的行?

实际上,我只需要内部的 LaTeX 代码,而从 stargazer 生成的 TeX 文件中手动删除这些行完全是浪费时间......

latex r tabular stargazer

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

如何比较熊猫中的两个字符串变量?

我的Pandas数据集中有两个字符串列

name1     name2
John Doe  John Doe
AleX T    Franz K
Run Code Online (Sandbox Code Playgroud)

我需要检查是否name1等于name2.我现在使用的天真方式是使用简单的面具

mask=df.name1==df.name2

但问题是可能存在错误标记的字符串(以不可预测的方式 - 数据太大),以防止发生精确匹配.

例如"John Doe"和"John Doe"不匹配.当然,我修剪,低调的琴弦,但其他可能性仍然存在.

一个想法是看是否name1包含在name2.但似乎我不能使用str.contains另一个变量作为参数.还有其他想法吗?

非常感谢!

编辑:使用isin给出非感性的结果.例

test = pd.DataFrame({'A': ["john doe", " john doe", 'John'], 'B': [' john doe', 'eddie murphy', 'batman']})

test
Out[6]: 
           A             B
0   john doe      john doe
1   john doe  eddie murphy
2       John        batman

test['A'].isin(test['B'])
Out[7]: 
0    False
1     True
2    False
Name: A, dtype: bool
Run Code Online (Sandbox Code Playgroud)

python string pandas

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

Dask:非常低的CPU使用率和多线程?这是预期的吗?

我使用的dask是在如何使用适用于熊猫并行多(模糊)的字符串比较?

基本上我做一些计算(没有写任何东西到磁盘)调用PandasFuzzywuzzy(可能不会释放GIL显然,如果这有帮助),我运行如下:

dmaster = dd.from_pandas(master, npartitions=4)
dmaster = dmaster.assign(my_value=dmaster.original.apply(lambda x: helper(x, slave), name='my_value'))
dmaster.compute(get=dask.multiprocessing.get)
Run Code Online (Sandbox Code Playgroud)

但是,代码的变体现在已经运行了10个小时,并且还没有结束.我在Windows任务管理器中注意到了

  • RAM utilization 非常低,对应于我的数据大小
  • CPU usage 每2/3秒左右从0%反弹至最高5%
  • 20 Python processes的大小是100MB,一个Python进程可能包含30GB大小的数据(我有一个128 GB的机器和8核CPU)

问题是:预期的行为是什么?我在dask这里设置一些选项显然是非常错误的吗?

当然,我明白细节取决于我到底在做什么,但也许上面模式已经可以说出某些事情是非常错误的?

非常感谢!!

python multithreading pandas fuzzywuzzy dask

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

熊猫:如何获取包含值列表的列的唯一值?

考虑以下数据框

df = pd.DataFrame({'name' : [['one two','three four'], ['one'],[], [],['one two'],['three']],
                   'col' : ['A','B','A','B','A','B']})       
df.sort_values(by='col',inplace=True)

df
Out[62]: 
  col                   name
0   A  [one two, three four]
2   A                     []
4   A              [one two]
1   B                  [one]
3   B                     []
5   B                [three]
Run Code Online (Sandbox Code Playgroud)

我想获得一列,以跟踪的name每个组合所包含的所有唯一字符串col

也就是说,预期的输出是

df
Out[62]: 
  col                   name    unique_list
0   A  [one two, three four]    [one two, three four]
2   A                     []    [one two, three four]
4   A              [one two]    [one two, three four]
1   B                  [one] …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Pandas:如何以毫秒为单位使用 between_time?

考虑一下:

import pandas as pd
import numpy as np

idx2=[pd.to_datetime('2016-08-31 22:08:12.000'), 
     pd.to_datetime('2016-08-31 22:08:12.200'),
     pd.to_datetime('2016-08-31 22:08:12.400')]

test=pd.DataFrame({'value':[1,1,3], 'groups' : ['A',np.NaN,'A']},index=idx2)
    test
Out[27]: 
                        groups  value
2016-08-31 22:08:12.000      A      1
2016-08-31 22:08:12.200    NaN      1
2016-08-31 22:08:12.400      A      3
Run Code Online (Sandbox Code Playgroud)

我只需要在22:08:12.200和之间保留数据22:08:12.400,所以我很自然地使用between_time

test.between_time('22:08:12.200','22:08:12.400')
Run Code Online (Sandbox Code Playgroud)

ValueError:无法将 arg ['22:08:12.200'] 转换为时间

这里有什么问题?如何dataframe根据毫秒信息根据时间切片?

python datetime pandas

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

我们可以用purrr(不同时)迭代两个列表吗?

考虑一下我有一个f(x,y)带两个参数和两个列表的函数

  • x_var = list('x','y','z')
  • y_var = list('a','b')

是否有一个purrr函数允许我迭代一个元素x_var和一个元素的每个组合y_var?也就是说,这样做f(x,a),f(x,b),f(y,a),f(y,b)等.

通常的解决方案是编写一个循环,但我想知道这里是否有更简洁(可能有purrr.

谢谢!

r purrr

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