小编Lon*_*Rob的帖子

如何更新MultiIndexed pandas DataFrame的子集

我正在使用MultiIndexed pandas DataFrame,并希望将DataFrame的子集乘以一定数量.

它与相同,但具有MultiIndex.

>>> d = pd.DataFrame({'year':[2008,2008,2008,2008,2009,2009,2009,2009], 
                      'flavour':['strawberry','strawberry','banana','banana',
                      'strawberry','strawberry','banana','banana'],
                      'day':['sat','sun','sat','sun','sat','sun','sat','sun'],
                      'sales':[10,12,22,23,11,13,23,24]})

>>> d = d.set_index(['year','flavour','day'])                  

>>> d
                     sales
year flavour    day       
2008 strawberry sat     10
                sun     12
     banana     sat     22
                sun     23
2009 strawberry sat     11
                sun     13
     banana     sat     23
                sun     24
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是,让我说我发现星期六的数字只是他们应该的一半!我想将所有sat销售额乘以2.

我的第一次尝试是:

sat = d.xs('sat', level='day')
sat = sat * 2
d.update(sat)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为变量sat已经失去day了索引的级别:

>>> sat
                 sales
year flavour          
2008 strawberry     20
     banana         44
2009 strawberry     22
     banana         46 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

如何在读取CSV文件时捕获`CParserError`

我想将CSV列表读入数据帧.但是,我在捕获文件具有与数据本身不匹配的标题行(即元数据或其他空行)时发生的错误时遇到问题.此错误是'CParserError'(请参阅底部的错误消息).

我目前的解决方案是使用try-except语句

try:
    #read file
except CParserError:
    #give me an error message
Run Code Online (Sandbox Code Playgroud)

但是,这失败并出现以下错误:

NameError: name 'CParserError' is not defined
Run Code Online (Sandbox Code Playgroud)

我的代码如下.正如您所看到的,我认为我需要多个except语句来捕获各种错误.第一个应检查默认编码类型是否有效(文件永远不会是utf-8或latin-1以外的任何文件).如果有标题行,pd.read_csv会给出一个'CParserError'消息(见下文),我需要捕获它.然后,如果还有其他杂项问题,我也想抓住这些问题.

任何解决方案都欢迎,理想情况下可以解释为什么CParserError不正确,或者是否可以修改try-except逻辑以避免依赖于此.

谢谢.

files_list = glob.glob('*.csv*')     #get all csvs
files_dict = {}           
for file in files_list:
    try:
        files_dict[file] = pd.read_csv('DFA_me_week27.csv', encoding='utf-8').read() 
    except UnicodeDecodeError:    
        files_dict[file] = pd.read_csv('DFA_me_week27.csv', encoding='Latin-1').read()
    except CParserError:
        print(file, 'failed: check for header rows')
    except:
        print(file, 'failed: some other error occurred')
Run Code Online (Sandbox Code Playgroud)

尝试使用标头解析CSV文件时出现错误消息:

CParserError                              Traceback (most recent call last)
<ipython-input-15-e454c053d675> in <module>()
----> 1 pd.read_csv('DFA_me_week27.csv')

C:\Users\john.lwli\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, dialect, compression, …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas

11
推荐指数
1
解决办法
4214
查看次数

创建具有固定数量元素(长度)的范围

在Python 2.7中,如何在具有固定数量元素的范围上创建列表,而不是在每个元素之间固定步长?

>>> # Creating a range with a fixed step between elements is easy:
>>> range(0, 10, 2)
[0, 2, 4, 6, 8]
>>> # I'm looking for something like this:
>>> foo(0, 10, num_of_elements=4)
[0.0, 2.5, 5, 7.5]
Run Code Online (Sandbox Code Playgroud)

python floating-point range python-2.7

10
推荐指数
2
解决办法
6276
查看次数

比较/差异新数据与d3.js更新的先前数据

我想表示当前数据集与客户计算的先前数据集之间的差异.

想象一下,我已经有三个圈子,绑定到数据[1, 2, 3].现在我想更新数据并根据新值和旧值之间的差异做些什么?

var new_data = [2, 2, 2]; // This is the new data I'd like to compare with the old

svg.selectAll("circle").data(new_data)
    .transition().duration(2000)
.attr("fill", "red") // e.g. I'd like to colour the circles red if the change
                     // is negative, blue if positive, black if no change.
.attr("r", function(d) { return d * 10; });
Run Code Online (Sandbox Code Playgroud)

这是一个JSFiddle,将上面的代码设置为一个例子.

javascript d3.js

9
推荐指数
2
解决办法
3237
查看次数

为什么ggplot生成的图不显示?

我无法显示来自的情节ggplot.我尝试过类似的东西

import pandas as pd
import pylab as plt
import statsmodels.api as sm
from ggplot import *

df = pd.DataFrame.from_csv('file.csv', index_col=None)
x=df['X']
y=df['Y']
plt=ggplot(data=df,aes(x=x, y=y)) +\
    geom_line() +\
    stat_smooth(colour='blue', span=0.2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

为什么不出现?

python ggplot2 python-3.x python-ggplot

9
推荐指数
1
解决办法
9353
查看次数

在Jupyter中显示乳胶表/表格与乳胶细胞魔术

根据这个Rich Display System的例子,Jupyter笔记本可以使用%%latex细胞魔法显示乳胶.

使用align环境给出的示例在我的system(Notebook Server 3.2.0-8b0eef4)上运行正常,但是当我尝试显示a tabular或a时table,结果就是很好地排版Latex代码!

乳胶不起作用

我需要添加一些序言来使这项工作成功吗?

latex ipython-notebook jupyter-notebook

9
推荐指数
1
解决办法
7756
查看次数

psycopg2.errors.ActiveSqlTransaction:CREATE TABLESPACE 无法在事务块内运行

我对 Python 很陌生,我们有一个应用程序容器和一个数据库容器。应用程序容器从 CLI 收集 DB_HOST、PORT 等值,并尝试在同一 Docker 主机上运行的容器化 Postgres DB 上创建表空间。

在执行查询时,我们收到以下错误。

psycopg2.errors.ActiveSqlTransaction: CREATE TABLESPACE cannot run inside a transaction block
Run Code Online (Sandbox Code Playgroud)

使用的Python库:

  • psycopg2
  • psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT

应用程序文档示例


FROM python:3.7-alpine

RUN apk update && \
    apk add --no-cache openssh sshpass && \
    apk add --no-cache --virtual .build-deps gcc musl-dev && \
    apk add linux-headers && \
    apk add python3-dev && \
    apk add postgresql-dev && \
    apk add postgresql-client && \
    apk add bash && \
    apk add libffi-dev make …
Run Code Online (Sandbox Code Playgroud)

python psycopg2 postgres-12

9
推荐指数
2
解决办法
6924
查看次数

unix环境'cd'命令的源代码

我在哪里可以找到Unix环境cd命令的源代码?

我想知道命令是如何实现的.

unix chdir

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

RStudio:构建和重新加载会在描述文件中的"建议"字段中添加空白行

每当我Build & Reload从RStudio的Build窗格运行时,我都会收到消息

==> Rcmd.exe INSTALL --no-multiarch rwiots    
Error: contains a blank line
Run Code Online (Sandbox Code Playgroud)

事实上,当我看时,我的DESCRIPTION文件在Suggests字段中包含一个空行.如果我删除它,它会在我尝试时再次创建Build & Reload.

Generate documentation with Roxygen勾选了选项,并在Configure...对话框中勾选了所有框.

我非常喜欢使用roxygen2记录我的函数并让RStudio构建我的NAMESPACE文件和我的DESCRIPTION文件的部分工作流程.那么我怎样才能解决这个非常奇怪的小问题呢?

非常感谢Rob Levy

r rstudio roxygen2

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

熊猫 groupby 与 dict

是否可以使用字典对列的元素进行分组?

例如:

In [3]: df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three','two', 'two', 'one', 'three'],
   ...:          'B' : np.random.randn(8)})
In [4]: df
Out[4]: 
       A         B
0    one  0.751612
1    one  0.333008
2    two  0.395667
3  three  1.636125
4    two  0.916435
5    two  1.076679
6    one -0.992324
7  three -0.593476

In [5]: d = {'one':'Start', 'two':'Start', 'three':'End'}
In [6]: grouped = df[['A','B']].groupby(d)
Run Code Online (Sandbox Code Playgroud)

此(和其他变体)返回一个空的 groupby 对象。我对使用的各种变体.apply也都失败了。

我想将列的值A与字典的键相匹配,并将行放入由值定义的组中。输出看起来像这样:

 Start:
           A         B
    0    one  0.751612
    1    one  0.333008
    2    two …
Run Code Online (Sandbox Code Playgroud)

python pandas

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