我有一个带有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) 是否有可能让stdin数据进入pandas DataFrame?
目前我将数据保存在一个中间json
文件中然后执行:
pandas.read_json('my_json_file.json')
Run Code Online (Sandbox Code Playgroud)
但是想知道是否可以直接在python脚本中管道stdin.我发现了这个:如果在Python中没有数据传输,如何从stdin或文件中读取? 但不知道如何在熊猫DF中逐行插入.
我在熊猫中有一个日期时间索引
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 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 Series
或DataFrame
?的开头删除单行?
编辑:我试过这个:
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()
方法慢得多.
我有一个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/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)
似乎在一些问题中报告了这个问题:
但似乎没有一个在MacOS上提供Anaconda特有的答案
有人解决了吗?
我有一个包含两列的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) 我正在使用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的内存占用?
否则,有关更好解决方案的任何建议吗?
我正在按照食谱设计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) 我注意到了这种现象,不确定是否是错误。我创建一个具有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)