小编Fra*_*Fra的帖子

pandas应用函数将多个值返回到pandas dataframe中的行

我有一个带有timeindex的数据帧和包含3D向量坐标的3列:

                         x             y             z
ts
2014-05-15 10:38         0.120117      0.987305      0.116211
2014-05-15 10:39         0.117188      0.984375      0.122070
2014-05-15 10:40         0.119141      0.987305      0.119141
2014-05-15 10:41         0.116211      0.984375      0.120117
2014-05-15 10:42         0.119141      0.983398      0.118164
Run Code Online (Sandbox Code Playgroud)

我想对每个也返回向量的行应用转换

def myfunc(a, b, c):
    do something
    return e, f, g
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

df.apply(myfunc, axis=1)
Run Code Online (Sandbox Code Playgroud)

我最终得到了一个Pandas系列,其元素是元组.这是因为申请将取得myfunc的结果而不解压缩它.如何更改myfunc以便我获得一个包含3列的新df?

编辑:

所有解决方案都起作用 Series系列解决方案允许列名,List解决方案似乎执行得更快.

def myfunc1(args):
    e=args[0] + 2*args[1]
    f=args[1]*args[2] +1
    g=args[2] + args[0] * args[1]
    return pd.Series([e,f,g], index=['a', 'b', 'c'])

def myfunc2(args):
    e=args[0] + 2*args[1]
    f=args[1]*args[2] +1
    g=args[2] + args[0] * args[1]
    return [e,f,g]

%timeit …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

来自stdin的熊猫数据

是否有可能让stdin数据进入pandas DataFrame?

目前我将数据保存在一个中间json文件中然后执行:

pandas.read_json('my_json_file.json')
Run Code Online (Sandbox Code Playgroud)

但是想知道是否可以直接在python脚本中管道stdin.我发现了这个:如果在Python中没有数据传输,如何从stdin或文件中读取? 但不知道如何在熊猫DF中逐行插入.

python json stdin pandas

14
推荐指数
1
解决办法
6226
查看次数

从numpy timedelta64获得秒数

我在熊猫中有一个日期时间索引

index = np.array(['2013-11-11T12:36:00.078757888-0800',
                  '2013-11-11T12:36:03.692692992-0800',
                  '2013-11-11T12:36:07.085489920-0800',
                  '2013-11-11T12:36:08.957488128-0800'], dtype='datetime64[ns]')
Run Code Online (Sandbox Code Playgroud)

我想以秒为单位计算时差.我想出的方式是:

diff(index).astype('float64')/1e9
Run Code Online (Sandbox Code Playgroud)

有更好/更清洁的方式吗?

python numpy pandas

13
推荐指数
1
解决办法
9338
查看次数

在蟒蛇熊猫的deque

我使用Python deque()来实现一个简单的循环缓冲区:

from collections import deque
import numpy as np

test_sequence = np.array(range(100)*2).reshape(100,2)
mybuffer = deque(np.zeros(20).reshape((10, 2)))

for i in test_sequence:
    mybuffer.popleft()
    mybuffer.append(i)

    do_something_on(mybuffer)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种简单的方法可以使用Series(或DataFrame)在Pandas中获得相同的东西.换句话说,如何在末尾有效地添加单行并在a SeriesDataFrame?的开头删除单行?

编辑:我试过这个:

myPandasBuffer = pd.DataFrame(columns=('A','B'), data=np.zeros(20).reshape((10, 2)))
newpoint = pd.DataFrame(columns=('A','B'), data=np.array([[1,1]]))

for i in test_sequence:
    newpoint[['A','B']] = i
    myPandasBuffer = pd.concat([myPandasBuffer.ix[1:],newpoint], ignore_index = True)

    do_something_on(myPandasBuffer)
Run Code Online (Sandbox Code Playgroud)

但它比deque()方法慢得多.

python buffer pandas

12
推荐指数
1
解决办法
2723
查看次数

规范在熊猫的行

我有一个pandas Dataframe,其中N列代表矢量的坐标(例如X,Y,Z,但可能超过3D).

我想沿着行聚合数据帧,并使用组合列的任意函数,例如:norm : (X^2 + Y^2 + Y^2).

我想做类似于这里以及此处此处所做的事情,但我想保持足够的通用,列数可以改变,它的行为就像

DataFrame.mean(axis = 1)
Run Code Online (Sandbox Code Playgroud)

要么

DataFrame.sum(axis = 1)
Run Code Online (Sandbox Code Playgroud)

python pandas

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

使用swig和Anaconda Python找不到Python.h

我正在尝试按照本教程编译一个简单的python/C示例:

http://www.swig.org/tutorial.html

我在MacOS上使用Anaconda python.

但是,当我跑

gcc -c example.c example_wrap.c -I/Users/myuser/anaconda/include/
Run Code Online (Sandbox Code Playgroud)

我明白了:

example_wrap.c:130:11: fatal error: 'Python.h' file not found
# include <Python.h>
          ^
Run Code Online (Sandbox Code Playgroud)

似乎在一些问题中报告了这个问题:

尝试编译C扩展模块时缺少Python.h.

缺少Python.h,无法找到

Python.h:没有这样的文件或目录

但似乎没有一个在MacOS上提供Anaconda特有的答案

有人解决了吗?

c python macos swig anaconda

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

具有多个列的pandas数据帧上的差异

我有一个包含两列的pandas数据框:

ddf.head()

    a    b
0   3136 13280
1   3072 13312
2   3152 13296
3   3120 13248
4   3120 13200
Run Code Online (Sandbox Code Playgroud)

我想计算同一列中连续元素之间的差异.现在,如果我一次只为一列做一次(ddf['a'].diff())它按预期工作,但是如果我尝试ddf.diff()它会给出:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-68-6ff864856571> in <module>()
----> 1 ddf.diff()

/home/app/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc in diff(self, periods)
   4285         diffed : DataFrame
   4286         """
-> 4287         new_data = self._data.diff(periods)
   4288         return self._constructor(new_data)
   4289 

/home/app/anaconda/lib/python2.7/site-packages/pandas/core/internals.pyc in diff(self, *args, **kwargs)
   1287 
   1288     def diff(self, *args, **kwargs):
-> 1289         return self.apply('diff', *args, **kwargs)
   1290 
   1291     def interpolate(self, *args, **kwargs):

/home/app/anaconda/lib/python2.7/site-packages/pandas/core/internals.pyc …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

减少python程序的内存占用

我正在使用numpy和pandas在python中开发一个数据分析工作器.我会部署很多这样的工作人员,所以我想保持它的轻量级.

我试过检查这段代码:

import logging
import resource
logging.basicConfig(level=logging.DEBUG)

def printmemory(msg):
    currentmemory = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
    logging.debug(msg+': total memory:%r Mb' % (int(currentmemory)/1000000.))

printmemory('begin')

#from numpy import array, nan, mean, std, sqrt, square
import numpy  as np
printmemory('numpy')

import pandas  as pd
printmemory('numpy')
Run Code Online (Sandbox Code Playgroud)

我发现只需将它们加载到内存中就会让我的工作人员变得非常沉重.有没有办法减少numpy和pandas的内存占用?

否则,有关更好解决方案的任何建议吗?

python numpy pandas

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

带通的butterworth过滤器频率scipy

我正在按照食谱设计scipy中的带通滤波器.但是,如果我过多地降低滤波频率,我会在高阶滤波器中使用垃圾.我究竟做错了什么?

from scipy.signal import butter, lfilter

def butter_bandpass(lowcut, highcut, fs, order=5):
    nyq = 0.5 * fs
    low = lowcut / nyq
    high = highcut / nyq
    b, a = butter(order, [low, high], btype='band')
    return b, a

if __name__ == "__main__":
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.signal import freqz  
    # Sample rate and desired cutoff frequencies (in Hz).
    fs = 25
    # Plot the frequency response for a few different orders.
    plt.figure(1)
    plt.clf()
    for order …
Run Code Online (Sandbox Code Playgroud)

python filtering numpy scipy

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

熊猫to_json更改数据类型

我注意到了这种现象,不确定是否是错误。我创建一个具有2个整数列和1个浮点列的数据框

import pandas as pd
df = pd.DataFrame([[1,2,0.2],[3,2,0.1]])
df.info()


<class 'pandas.core.frame.DataFrame'>
Int64Index: 2 entries, 0 to 1
Data columns (total 3 columns):
0    2 non-null int64
1    2 non-null int64
2    2 non-null float64
dtypes: float64(1), int64(2)
Run Code Online (Sandbox Code Playgroud)

如果我将其输出到Json,则dtype信息会丢失:

df.to_json(orient= 'records')

'[{"0":1.0,"1":2.0,"2":0.2},{"0":3.0,"1":2.0,"2":0.1}]'
Run Code Online (Sandbox Code Playgroud)

所有数据都转换为浮点型。例如,如果一列包含ns时间戳,则会出现问题,因为它们已转换为指数符号,并且亚秒级信息丢失。

我也在这里提出了这个问题:https : //github.com/pydata/pandas/issues/7583

我期望的结果是:

'[{"0":1,"1":2,"2":0.2},{"0":3,"1":2,"2":0.1}]'
Run Code Online (Sandbox Code Playgroud)

python json pandas

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

标签 统计

python ×10

pandas ×8

numpy ×3

json ×2

anaconda ×1

buffer ×1

c ×1

filtering ×1

macos ×1

scipy ×1

stdin ×1

swig ×1