小编Ann*_*nne的帖子

Pandas groupby:如何获得字符串联合

我有这样的数据帧:

   A         B       C
0  1  0.749065    This
1  2  0.301084      is
2  3  0.463468       a
3  4  0.643961  random
4  1  0.866521  string
5  2  0.120737       !
Run Code Online (Sandbox Code Playgroud)

调用

In [10]: print df.groupby("A")["B"].sum()
Run Code Online (Sandbox Code Playgroud)

将返回

A
1    1.615586
2    0.421821
3    0.463468
4    0.643961
Run Code Online (Sandbox Code Playgroud)

现在我想为"C"列做"相同".因为该列包含字符串,sum()不起作用(尽管您可能认为它会连接字符串).我真正想看到的是每个组的一个列表或一组字符串,即

A
1    {This, string}
2    {is, !}
3    {a}
4    {random}
Run Code Online (Sandbox Code Playgroud)

我一直在努力想办法做到这一点.

Series.unique()(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.unique.html)不起作用,尽管

df.groupby("A")["B"]
Run Code Online (Sandbox Code Playgroud)

是一个

pandas.core.groupby.SeriesGroupBy object
Run Code Online (Sandbox Code Playgroud)

所以我希望任何系列方法都能奏效.有任何想法吗?

python pandas

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

如何估算Pandas的DataFrame需要多少内存?

我一直想知道......如果我正在读取一个400MB的csv文件到一个pandas数据帧(使用read_csv或read_table),有没有办法猜测这需要多少内存?只是想更好地了解数据框架和内存......

python pandas

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

使用pandas read_csv时出现内存错误

我正在尝试做一些相当简单的事情,将大型csv文件读入pandas数据帧.

data = pandas.read_csv(filepath, header = 0, sep = DELIMITER,skiprows = 2)
Run Code Online (Sandbox Code Playgroud)

代码要么失败MemoryError,要么永远不会完成.

任务管理器中的内存使用量停止在506 Mb,并且在5分钟没有变化且没有CPU活动的过程中我停止了它.

我使用的是pandas版本0.11.0.

我知道文件解析器曾经存在内存问题,但根据http://wesmckinney.com/blog/?p=543这应该已修复.

我试图读取的文件是366 Mb,如果我将文件剪切为短(25 Mb),则上面的代码可以正常工作.

还有一个弹出窗口告诉我它无法写入地址0x1e0baf93 ...

堆栈跟踪:

Traceback (most recent call last):
  File "F:\QA ALM\Python\new WIM data\new WIM data\new_WIM_data.py", line 25, in
 <module>
    wimdata = pandas.read_csv(filepath, header = 0, sep = DELIMITER,skiprows = 2
)
  File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\io\parsers.py"
, line 401, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\io\parsers.py"
, line 216, in _read
    return parser.read()
  File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\io\parsers.py"
, …
Run Code Online (Sandbox Code Playgroud)

python windows pandas

78
推荐指数
3
解决办法
6万
查看次数

python中的多处理 - 在多个进程之间共享大对象(例如pandas dataframe)

我更精确地使用Python多处理

from multiprocessing import Pool
p = Pool(15)

args = [(df, config1), (df, config2), ...] #list of args - df is the same object in each tuple
res = p.map_async(func, args) #func is some arbitrary function
p.close()
p.join()
Run Code Online (Sandbox Code Playgroud)

这种方法具有巨大的内存消耗; 几乎占用了我所有的RAM(此时它变得非常慢,因此使多处理非常无用).我假设问题是这df是一个巨大的对象(一个大型的pandas数据帧),它会被复制到每个进程.我试过使用multiprocessing.Value共享数据帧而不复制

shared_df = multiprocessing.Value(pandas.DataFrame, df)
args = [(shared_df, config1), (shared_df, config2), ...] 
Run Code Online (Sandbox Code Playgroud)

(正如Python多处理共享内存中所建议的那样),但是这给了我TypeError: this type has no size(与在Python进程之间共享一个复杂对象相同,遗憾的是我不理解答案).

我第一次使用多处理,也许我的理解还不够好.是multiprocessing.Value实际上即使在这种情况下使用了正确的事情?我已经看到了其他建议(例如队列),但现在有点困惑.有什么选择可以共享内存,在这种情况下哪一个最好?

python multiprocessing pandas

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

pandas:将datetime转换为月末

我编写了一个将pandas datetime日期转换为month-end的函数:

import pandas
import numpy
import datetime
from pandas.tseries.offsets import Day, MonthEnd

def get_month_end(d):
    month_end = d - Day() + MonthEnd() 
    if month_end.month == d.month:
        return month_end # 31/March + MonthEnd() returns 30/April
    else:
        print "Something went wrong while converting dates to EOM: " + d + " was converted to " + month_end
        raise
Run Code Online (Sandbox Code Playgroud)

这个功能似乎很慢,我想知道是否有更快的替代方案?我注意到它很慢的原因是我在一个具有50'000个日期的数据帧列上运行它,并且我可以看到自引入该函数以来代码慢得多(在我将日期转换为月末之前).

df = pandas.read_csv(inpath, na_values = nas, converters = {open_date: read_as_date})
df[open_date] = df[open_date].apply(get_month_end)
Run Code Online (Sandbox Code Playgroud)

我不确定这是否相关,但我正在阅读如下日期:

def read_as_date(x):
    return datetime.datetime.strptime(x, fmt)
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Pandas数据帧:检查数据是否单调递减

我有一个像这样的pandas数据帧:

    Balance       Jan       Feb       Mar       Apr
0  9.724135  0.389376  0.464451  0.229964  0.691504
1  1.114782  0.838406  0.679096  0.185135  0.143883
2  7.613946  0.960876  0.220274  0.788265  0.606402
3  0.144517  0.800086  0.287874  0.223539  0.206002
4  1.332838  0.430812  0.939402  0.045262  0.388466
Run Code Online (Sandbox Code Playgroud)

我想通过弄清楚从1月到4月的值是否单调递减(如在1和3行中的索引)来划分行,然后将每个组的余额相加,即最后我想要结束两个数字(减少时间序列为1.259299,其他数字为18.670919).

我想如果我可以添加一个"正在减少"的列中包含布尔值,我可以使用pandas的groupby来完成总和,但是我该如何创建这个列呢?

谢谢,安妮

python pandas

11
推荐指数
2
解决办法
4031
查看次数

熊猫系列:改变指数的顺序

我有一个Pandas系列,例如像这样

s = pandas.Series(data = [1,2,3], index = ['A', 'B', 'C'])
Run Code Online (Sandbox Code Playgroud)

如何更改索引的顺序,以便s变为

B    2
A    1
C    3
Run Code Online (Sandbox Code Playgroud)

我试过了

s['B','A','C']
Run Code Online (Sandbox Code Playgroud)

但这会给我一个关键错误.(在这个特定的例子中,我可能会在构造系列时处理索引的顺序,但是我希望在创建系列之后有办法完成此操作.)

python pandas

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

pandas read_csv:忽略带有空数据的尾随行

我想从 csv 文件中读取以下数据:

id;type;start;end
Test;OIS;01/07/2016;01/07/2018
;;;
;;;
Run Code Online (Sandbox Code Playgroud)

但是,pandas read_csv 也会尝试读取空行;;;。有没有办法自动忽略这些空数据的尾随行?

这些行导致了问题,因为我使用read_csvwith converters,并且转换器中的函数在遇到无效数据时会尽职尽责地抛出异常,这意味着我什至没有到达有效的数据帧。我可以更改函数以将无效数据转换为NaN然后NaN从数据框中删除s,但随后我会默默地删除错误数据以及那些空行。

一些澄清:

  • 空数据行总是拖尾,这是从 Excel 生成的 csv 文件的常见问题。
  • 数据是用户生成的,因此手动清理文件不是一种选择。

python pandas

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

Python:鼻子没有接受新的测试

我刚刚在我的一个 Python 模块中添加了一个单元测试,但鼻子拒绝接受。测试看起来像这样:

class TestMargin(unittest.TestCase):

    def setUp(self):
        super().setUp()

    def test_margin(self):
        self.assertTrue(False)
Run Code Online (Sandbox Code Playgroud)

我希望这个测试失败,但似乎它甚至没有被接受。我正在用--all-modules标志运行鼻子,其他模块中的测试确实被选中,所以它似乎不是鼻子的通用问题。我已经检查了鼻子的文档,但看不出为什么这个测试不应该工作的任何充分理由......

编辑:我通过(有点随意)__init__.py在模块级别添加一个空来解决这个问题。但这为什么会有帮助?

python nose

4
推荐指数
1
解决办法
1667
查看次数

Python:Nose没有接受单元测试

我已经在python中编写了一个单元测试,并希望在我运行鼻子时将其拾起.当我在包含测试的文件上运行鼻子时,它工作正常,即

nosetests myFile.py
Run Code Online (Sandbox Code Playgroud)

但不是在我跑的时候

nosetests
Run Code Online (Sandbox Code Playgroud)

在同一目录中.我以为鼻子会在你运行它的目录中自动获取所有测试?知道如何让它工作吗?该目录中的各种文件中有更多测试,我希望能够同时运行它们.

这是我的测试看起来像:

class testSimple(unittest.TestCase):

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def testStupid(self):
        self.Assert(False)
Run Code Online (Sandbox Code Playgroud)

python unit-testing nose

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

标签 统计

python ×10

pandas ×8

nose ×2

multiprocessing ×1

unit-testing ×1

windows ×1