我想出了这两种方法.还有更好的吗?
>>> 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)
只是想确保我没有遗漏更明显的东西.
我正在尝试使用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)
结果:
绘制两条线 - 图形尺寸不是(10,4)
fig = plt.figure(figsize=(10,4))
df[['A', 'B']].plot()
plt.savefig("plot2.png")
plt.show()
Run Code Online (Sandbox Code Playgroud)
结果:
这样做的正确方法是什么,无论选择的系列数量如何,图形大小都是一致的设置?
我正在尝试加载我使用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) 在这个(不可读的)论坛帖子之后,我认为将它张贴在堆栈溢出上以供后代搜索它是合适的。
如何在 init 上为健身房环境传递参数?
我想用我准备的系列形式的查找表生成的一组更准确/完整的值替换 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) 我正在尝试将 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) 在使用 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) 我正在研究 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)
这显然不会完美地工作,因为每行的格式每次都会不同。所以我需要一个包,您可以先在其中设置表格(指定所需的格式、列宽等)。然后一次一行输出数据。
有谁知道这是否可以在这些包之一或我可以导入的另一个包中实现?
我要把这个贴在这里,因为它是一个栗子,让我有些头疼。这可以说是四年前发布的这个问题的副本,但我会再次发布,以防有人遇到我在这里遇到的特定 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调试程序会话中引发的以下异常:
(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)