我正在使用C/C++从传统后端系统中提取海量数据,并使用它将其移至Python distutils.在Python中获取数据后,我将其放入pandas DataFrame对象进行数据分析.现在我想走得更快,并希望避免第二步.
是否有用于pandas的C/C++ API在C/C++中创建DataFrame,添加我的C/C++数据并将其传递给Python?我正在考虑类似于numpy C API的东西.
我已经想要在C中创建numpy数组对象作为一种解决方法,但我大量使用时间序列数据,并且也喜欢拥有TimeSeries和date_range对象.
我有一个Series充满了十进制数字dtype Decimal 的pandas 对象.我想使用新的pandas 0.8函数重新采样十进制时间序列,如下所示:
resampled = ts.resample('D', how = 'mean')
Run Code Online (Sandbox Code Playgroud)
尝试这个时,我得到一个"GroupByError:没有要聚合的数字类型"错误.我假设问题是np.mean用于internaly重新采样值,np.mean期望浮点数而不是Decimals.
感谢这个论坛的帮助,我设法使用groupBy和apply函数解决了类似的问题,但我也想使用酷重采样功能.
如何在具有Decimal类型值的pandas TimeSeries上使用mean方法?
不知道怎么解决这个问题?
以下是创建错误的完整ipython会话:
In [37]: from decimal import Decimal
In [38]: from pandas import *
In [39]: rng = date_range('1.1.2012',periods=48, freq='H')
In [40]: rnd = np.random.randn(len(rng))
In [41]: rnd_dec = [Decimal(x) for x in rnd]
In [42]: ts = Series(rnd_dec, index=rng)
In [43]: ts[0:3]
Out[43]:
2012-01-01 00:00:00 -0.1020591335576267189022559023214853368699550628
2012-01-01 01:00:00 0.99245713975437366283216533702216111123561859130
2012-01-01 02:00:00 1.80080710727195758558139004890108481049537658691
Freq: H
In [44]: type(ts[0])
Out[44]: decimal.Decimal
In [45]: ts.resample('D', …Run Code Online (Sandbox Code Playgroud) 我有一个包含两列的DataFrame.一列填充时间戳,另一列填充同一行中时间戳的UTC小时数.
DataFrame看起来像这样:
In [44]: df
Out[44]:
DATETIME OFFSET
0 2013-01-01 00:00:00+00:00 1
1 2013-01-01 01:00:00+00:00 1
2 2013-01-01 02:00:00+00:00 1
3 2013-01-01 03:00:00+00:00 1
4 2013-01-01 04:00:00+00:00 1
5 2013-01-01 05:00:00+00:00 1
6 2013-01-01 06:00:00+00:00 2
7 2013-01-01 07:00:00+00:00 2
8 2013-01-01 08:00:00+00:00 2
Run Code Online (Sandbox Code Playgroud)
我想要实现的是将每行的偏移量添加到时间戳:
In [44]: df
Out[44]:
DATETIME OFFSET
0 2013-01-01 00:00:00+01:00 1
1 2013-01-01 01:00:00+01:00 1
2 2013-01-01 02:00:00+01:00 1
3 2013-01-01 03:00:00+01:00 1
4 2013-01-01 04:00:00+01:00 1
5 2013-01-01 05:00:00+01:00 1
6 2013-01-01 06:00:00+02:00 2
7 …Run Code Online (Sandbox Code Playgroud) 我需要在pandas TimeSeries/ DataFrameobject中存储Python十进制类型值.当在TimeSeries/DataFrame上使用"groupby"和"mean"时,Pandas会给我一个错误.以下基于浮点数的代码运行良好:
[0]: by = lambda x: lambda y: getattr(y, x)
[1]: rng = date_range('1/1/2000', periods=40, freq='4h')
[2]: rnd = np.random.randn(len(rng))
[3]: ts = TimeSeries(rnd, index=rng)
[4]: ts.groupby([by('year'), by('month'), by('day')]).mean()
2000 1 1 0.512422
2 0.447235
3 0.290151
4 -0.227240
5 0.078815
6 0.396150
7 -0.507316
Run Code Online (Sandbox Code Playgroud)
但是如果使用十进制值而不是浮点数做同样的事情我会得到一个错误:
[5]: rnd = [Decimal(x) for x in rnd]
[6]: ts = TimeSeries(rnd, index=rng, dtype=Decimal)
[7]: ts.groupby([by('year'), by('month'), by('day')]).mean() #Crash!
Traceback (most recent call last):
File "C:\Users\TM\Documents\Python\tm.py", line 100, in <module> …Run Code Online (Sandbox Code Playgroud) 我正在使用read_csv将CSV文件读入pandas数据帧.我的CSV文件包含大量小数/浮点数.数字使用欧洲十进制表示法编码:
1.234.456,78
Run Code Online (Sandbox Code Playgroud)
这意味着'.' 用作千位分隔符,','是小数点.
大熊猫0.8.提供一个名为"千"的read_csv参数来设置千位分隔符.还有一个额外的参数来提供小数点吗?如果不是,解析欧式十进制数的最有效方法是什么?
目前我正在使用字符串替换,我认为这是一个重要的性能惩罚.我正在使用的编码是这样的:
# Convert to float data type and change decimal point from ',' to '.'
f = lambda x: string.replace(x, u',', u'.')
df['MyColumn'] = df['MyColumn'].map(f)
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
谢谢,托马斯