小编and*_*rew的帖子

groupby for pandas系列无效

我无法在pandas Series对象上进行groupby.DataFrames很好,但我似乎无法使用Series进行groupby.有没有人能够让这个工作?

>>> import pandas as pd
>>> a = pd.Series([1,2,3,4], index=[4,3,2,1])
>>> a
4    1
3    2
2    3
1    4
dtype: int64
>>> a.groupby()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/share/apps/install/anaconda/lib/python2.7/site-packages/pandas/core/generic.py", line 153, in groupby
    sort=sort, group_keys=group_keys)
  File "/share/apps/install/anaconda/lib/python2.7/site-packages/pandas/core/groupby.py", line 537, in groupby
    return klass(obj, by, **kwds)
  File "/share/apps/install/anaconda/lib/python2.7/site-packages/pandas/core/groupby.py", line 195, in __init__
    level=level, sort=sort)
  File "/share/apps/install/anaconda/lib/python2.7/site-packages/pandas/core/groupby.py", line 1326, in _get_grouper
    ping = Grouping(group_axis, gpr, name=name, level=level, sort=sort)
  File "/share/apps/install/anaconda/lib/python2.7/site-packages/pandas/core/groupby.py", line 1203, …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

不一致的pandas read_csv dtype推断大型TSV文件中的大部分整数字符串列

我有一个制表符分隔文件,其中一列应该被解释为一个字符串,但许多条目都是整数.使用小文件read_csv在看到一些非整数值后正确地将列解释为字符串,但是对于较大的文件,这不起作用:

import pandas as pd
df = pd.DataFrame({'a':['1']*100000 + ['X']*100000 + ['1']*100000, 'b':['b']*300000})
df.to_csv('test', sep='\t', index=False, na_rep='NA')
df2 = pd.read_csv('test', sep='\t')
print df2['a'].unique()
for a in df2['a'][262140:262150]:
    print repr(a)
Run Code Online (Sandbox Code Playgroud)

输出:

['1' 'X' 1]
'1'
'1'
'1'
'1'
1
1
1
1
1
1
Run Code Online (Sandbox Code Playgroud)

有趣的是262144是2的幂,所以我认为推理和转换发生在块中,但是正在跳过一些块.

我相当肯定这是一个错误,但是想要一个可能使用引用的解决办法,尽管为读写添加quoting = csv.QUOTE_NONNUMERIC并不能解决问题.理想情况下,我可以通过引用我的字符串数据来解决这个问题,并以某种方式迫使pandas不对引用的数据进行任何推断.

使用pandas 0.12.0

python csv types type-inference pandas

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

如何在__main__(python)中定义的pickle函数/类

我希望能够从__main__中挑选一个函数或类,其中明显的问题(在其他帖子中提到),pickle函数/类在__main__命名空间中,而在另一个脚本/模块中解开将失败.

我有以下解决方案可行,是否有理由不应该这样做?

以下是myscript.py:

import myscript
import pickle

if __name__ == "__main__":               

    print pickle.dumps(myscript.myclass())

else:

    class myclass:
        pass
Run Code Online (Sandbox Code Playgroud)

编辑:unpickling将在一个脚本/模块中完成,该脚本/模块可以访问 myscript.py并且可以执行import myscript.目的是使用类似并行python的解决方案远程调用函数,并能够编写一个包含可远程访问的函数/类的简短独立脚本.

python pickle

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

说服 gcc 忽略系统库以支持本地安装的库

我正在尝试构建一个使用 boost_serialization 和 boost_iostreams 的简单可执行文件。

#include <fstream>
#include <iostream>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/device/file.hpp>

int main()
{
    using namespace boost::iostreams;
    filtering_ostream os;
    os.push(boost::iostreams::gzip_compressor());
    os.push(boost::iostreams::file_sink("emptyGzipBug.txt.gz"));
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我正在使用的系统在 /usr/lib/ 中有一个非常过时的 boost_serialization 版本,我无法更改它。

当我使用构建示例时,我相当确定

g++ -o main main.cpp -lboost_serialization -lboost_iostreams
Run Code Online (Sandbox Code Playgroud)

导致链接器错误是因为 gcc 使用 boost_serialization 的系统版本而不是我本地安装的版本。将 LIBRARY_PATH 和 LD_LIBRARY_PATH 设置为 /home/andrew/install/lib 不起作用。当我使用

g++ -o main main.cpp -L/home/andrew/install/lib -lboost_serialization -lboost_iostreams
Run Code Online (Sandbox Code Playgroud)

然后一切正常。

我的问题是:

  1. 我怎样才能让 gcc 告诉我它使用的库的文件名?

  2. 是否可以设置环境,以便我不必在 gcc 的命令行上指定本地 boost 的绝对路径。

linux linker gcc

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

标签 统计

python ×3

pandas ×2

csv ×1

gcc ×1

linker ×1

linux ×1

pickle ×1

type-inference ×1

types ×1