小编Bil*_*ill的帖子

在Pandas数据帧中对所有值求和的最佳方法是什么?

我想出了这两种方法.还有更好的吗?

>>> import pandas as pd
>>> df = pd.DataFrame({'A': [5, 6, 7], 'B': [7, 8, 9]})
>>> print df.sum().sum()
42
>>> print df.values.sum()
42
Run Code Online (Sandbox Code Playgroud)

只是想确保我没有遗漏更明显的东西.

python numpy sum dataframe pandas

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

使用pandas plot方法设置图形大小时不一致

我正在尝试使用pandas数据帧的绘图方法的便利性,同时调整生成的图形的大小.(我将数据保存到文件中,并在Jupyter笔记本中内联显示).我发现下面的方法大部分都是成功的,除非我在同一个图表上绘制两条线 - 然后图形又回到默认大小.

我怀疑这可能是由于系列图和数据框图之间的差异所致.

设置示例代码:

data = {
    'A': 90 + np.random.randn(366),
    'B': 85 + np.random.randn(366)
}

date_range = pd.date_range('2016-01-01', '2016-12-31')

index = pd.Index(date_range, name='Date')

df = pd.DataFrame(data=data, index=index)
Run Code Online (Sandbox Code Playgroud)

控制 - 此代码生成预期结果(宽图):

fig = plt.figure(figsize=(10,4))

df['A'].plot()
plt.savefig("plot1.png")
plt.show()
Run Code Online (Sandbox Code Playgroud)

结果:

plot1.png

绘制两条线 - 图形尺寸不是(10,4)

fig = plt.figure(figsize=(10,4))

df[['A', 'B']].plot()
plt.savefig("plot2.png")
plt.show()
Run Code Online (Sandbox Code Playgroud)

结果:

plot2.png

这样做的正确方法是什么,无论选择的系列数量如何,图形大小都是一致的设置?

python plot matplotlib pandas

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

标记数据时出错.C错误:转义字符后的EOF

我正在尝试加载我使用Objective-C(使用XCode)编写的OS X应用程序创建的csv文本文件.文本文件(temp2.​​csv)在编辑器中看起来很好,但它有问题,我在将它读入Pandas数据帧时会收到此错误.如果我将数据复制到一个新的文本文件(temp.csv)并保存它工作正常!两个文本文件明显不同(一个是74个字节,另一个是150个) - 可能是不可见的字符? - 但是它非常烦人,因为我希望python代码加载C代码生成的文本文件.附上文件以供参考.

temp.csv

-3.132700,0.355885,9.000000,0.444416
-3.128256,0.444416,9.000000,0.532507
Run Code Online (Sandbox Code Playgroud)

temp2.​​csv

-3.132700,0.355885,9.000000,0.444416
-3.128256,0.444416,9.000000,0.532507
Run Code Online (Sandbox Code Playgroud)

(我在StackExchange上找不到任何有关此特定错误的帮助).

Python 2.7.11 |Anaconda 2.2.0 (x86_64)| (default, Dec  6 2015, 18:57:58) 
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> import pandas as pd
>>> df = pd.read_csv("temp2.csv", header=None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/billtubbs/anaconda/lib/python2.7/site-packages/pandas/io/parsers.py", line 498, in …
Run Code Online (Sandbox Code Playgroud)

python csv text-files eof pandas

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

如何在初始化时将参数传递给 openai-gym 环境

这个(不可读的)论坛帖子之后,我认为将它张贴在堆栈溢出上以供后代搜索它是合适的。

如何在 init 上为健身房环境传递参数?

openai-gym

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

使用系列查找表替换 Pandas DataFrame 列中的值

我想用我准备的系列形式的查找表生成的一组更准确/完整的值替换 DataFrame 中的一列值。

我以为我可以这样做,但结果并不如预期。

这是我要修复的数据帧:

In [6]: df_normalised.head(10)
Out[6]: 
  code                                          name
0    8                             Human development
1   11                                              
2    1                           Economic management
3    6         Social protection and risk management
4    5                         Trade and integration
5    2                      Public sector governance
6   11  Environment and natural resources management
7    6         Social protection and risk management
8    7                   Social dev/gender/inclusion
9    7                   Social dev/gender/inclusion
Run Code Online (Sandbox Code Playgroud)

(注意第 2 行中缺少的名称)。

这是我创建的用于修复的查找表:

In [20]: names
Out[20]: 
1                              Economic management
10                               Rural development
11    Environment and natural resources management …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

即使 index_col=None,Pandas read_excel 有时也会创建索引

我正在尝试将 excel 文件读入数据框中,并且我想稍后设置索引,所以我不希望大熊猫使用第 0 列作为索引值。

默认情况下 ( index_col=None),它不应该使用第 0 列作为索引,但我发现如果工作表的单元格 A1 中没有值,它会使用。

有什么方法可以覆盖这种行为(我正在加载许多在单元格 A1 中没有值的工作表)?

当 test1.xlsx 在单元格 A1 中具有值“DATE”时,这按预期工作:

In [19]: pd.read_excel('test1.xlsx')                                             
Out[19]: 
                 DATE         A         B         C
0 2018-01-01 00:00:00  0.766895  1.142639  0.810603
1 2018-01-01 01:00:00  0.605812  0.890286  0.810603
2 2018-01-01 02:00:00  0.623123  1.053022  0.810603
3 2018-01-01 03:00:00  0.740577  1.505082  0.810603
4 2018-01-01 04:00:00  0.335573 -0.024649  0.810603
Run Code Online (Sandbox Code Playgroud)

但是当工作表在单元格 A1 中没有值时,它会自动将第 0 列的值分配给索引:

In [20]: pd.read_excel('test2.xlsx', index_col=None)                             
Out[20]: 
                            A         B         C
2018-01-01 00:00:00  0.766895  1.142639  0.810603
2018-01-01 …
Run Code Online (Sandbox Code Playgroud)

python indexing excel dataframe pandas

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

替换 Pandas MultiIndex 的所有级别中的 NaN 值

在使用 MultiIndex 读取 Excel 工作表后,我发现 np.nan 出现在索引中,因为某些值是“N/A”,并且 pd.read_excel 认为转换它们是个好主意。但是我想将它们保留为“N/A”以保留多索引。我认为使用MultiIndex.fillna将它们更改回来很容易,但我收到此错误:

index = pd.MultiIndex(levels=[[u'foo', u'bar'], [u'one', np.nan]],
           codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
           names=[u'first', u'second'])
df = pd.DataFrame(index=index, columns=['A', 'B'])
df
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

df.index.fillna("N/A")
Run Code Online (Sandbox Code Playgroud)

输出:

---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-17-09e14dcdc74f> in <module>
----> 1 df.index.fillna("N/A")

/anaconda3/envs/torch/lib/python3.7/site-packages/pandas/core/indexes/multi.py in fillna(self, value, downcast)
   1456         fillna is not implemented for MultiIndex
   1457         """
-> 1458         raise NotImplementedError("isna is not defined for MultiIndex")
   1459 
   1460     @Appender(_index_shared_docs["dropna"])

NotImplementedError: isna is not defined for …
Run Code Online (Sandbox Code Playgroud)

nan multi-index dataframe pandas

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

在Python中将数据输出顺序打印为格式化表格

我正在研究 Python 包,它们提供了一种简单的方法来将格式化的“漂亮”表格作为文本输出。这个答案提供了一些建议。问题是,我想像记录器一样按顺序打印我的表(一次一行)。

为了说明这一点, tabulate的输出非常适合我的应用程序:

from tabulate import tabulate   
some_data = [['08:01', 1.00, 32], ['08:02', 1.01, 33], ['08:03', 1.02, 33]]
headers = ['Time', 'x', 'n']
print(tabulate(some_data, headers=headers, tablefmt='plain'))
Run Code Online (Sandbox Code Playgroud)

输出:

Time       x    n
08:01   1      32
08:02   1.01   33
08:03   1.02   33
Run Code Online (Sandbox Code Playgroud)

但我想一次执行一个操作,而不是一次性执行所有操作: 1. 打印标题 2. 打印第一行数据 3. 打印下一行 4. ...等等。

当然,我尝试过这个:

print(tabulate(some_data[0:1], tablefmt='plain'))
Run Code Online (Sandbox Code Playgroud)

输出:

08:01  1  32
Run Code Online (Sandbox Code Playgroud)

这显然不会完美地工作,因为每行的格式每次都会不同。所以我需要一个包,您可以先在其中设置表格(指定所需的格式、列宽等)。然后一次一行输出数据。

有谁知道这是否可以在这些包之一或我可以导入的另一个包中实现?

python format console dataframe output

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

Python / Numpy AttributeError:'float' 对象没有属性 'sin'

我要把这个贴在这里,因为它是一个栗子,让我有些头疼。这可以说是四年前发布的这个问题的副本,但我会再次发布,以防有​​人遇到我在这里遇到的特定 pandas-numpy 不兼容问题。或者也许有人会想出更好的答案。

代码片段:

#import pdb; pdb.set_trace()

# TODO: This raises AttributeError: 'float' object has no attribute 'sin'
xr = xw + L*np.sin(?r)
Run Code Online (Sandbox Code Playgroud)

输出:

Traceback (most recent call last):
  File "MIP_MPC_demo.py", line 561, in <module>
    main()
  File "MIP_MPC_demo.py", line 557, in main
    animation = create_animation(model, data_recorder)
  File "MIP_MPC_demo.py", line 358, in create_animation
    xr = xw + L*np.sin(?r)
AttributeError: 'float' object has no attribute 'sin'
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的:

(Pdb) type(np)
<class 'module'>
(Pdb) np.sin
<ufunc 'sin'>
(Pdb) type(?r)
<class 'pandas.core.series.Series'>
(Pdb) …
Run Code Online (Sandbox Code Playgroud)

python floating-point numpy attributeerror pandas

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

iPython调试器引发`NameError:name ... not defined`

我无法理解此Python调试程序会话中引发的以下异常:

(Pdb) p [move for move in move_values if move[0] == max_value]
*** NameError: name 'max_value' is not defined
(Pdb) [move for move in move_values]
[(0.5, (0, 0)), (0.5, (0, 1)), (0.5, (0, 2)), (0.5, (1, 0)), (0.5, (1, 1)), (0.5, (1, 2)), (0.5, (2, 0)), (0.5, (2, 1)), (0.5, (2, 2))]
(Pdb) max_value
0.5
(Pdb) (0.5, (0, 2))[0] == max_value
True
(Pdb) [move for move in move_values if move[0] == 0.5]
[(0.5, (0, 0)), (0.5, (0, 1)), (0.5, (0, …
Run Code Online (Sandbox Code Playgroud)

python ipython nameerror pdb

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