小编cs9*_*s95的帖子

将一个pandas数据帧列表连接在一起

我有一个Pandas数据帧列表,我想将它们组合成一个Pandas数据帧.我使用的是Python 2.7.10和Pandas 0.16.2

我从以下位置创建了数据框列表:

import pandas as pd
dfs = []
sqlall = "select * from mytable"

for chunk in pd.read_sql_query(sqlall , cnxn, chunksize=10000):
    dfs.append(chunk)
Run Code Online (Sandbox Code Playgroud)

这将返回数据帧列表

type(dfs[0])
Out[6]: pandas.core.frame.DataFrame

type(dfs)
Out[7]: list

len(dfs)
Out[8]: 408
Run Code Online (Sandbox Code Playgroud)

这是一些示例数据

# sample dataframes
d1 = pd.DataFrame({'one' : [1., 2., 3., 4.], 'two' : [4., 3., 2., 1.]})
d2 = pd.DataFrame({'one' : [5., 6., 7., 8.], 'two' : [9., 10., 11., 12.]})
d3 = pd.DataFrame({'one' : [15., 16., 17., 18.], 'two' : [19., 10., 11., …
Run Code Online (Sandbox Code Playgroud)

python concat dataframe pandas

104
推荐指数
4
解决办法
10万
查看次数

从列中的字符串中删除不需要的部分

我正在寻找一种有效的方法来从DataFrame列中的字符串中删除不需要的部分.

数据看起来像:

    time    result
1    09:00   +52A
2    10:00   +62B
3    11:00   +44a
4    12:00   +30b
5    13:00   -110a
Run Code Online (Sandbox Code Playgroud)

我需要将这些数据修剪为:

    time    result
1    09:00   52
2    10:00   62
3    11:00   44
4    12:00   30
5    13:00   110
Run Code Online (Sandbox Code Playgroud)

我试过了.str.lstrip('+-').str.rstrip('aAbBcC'),但得到一个错误:

TypeError: wrapper() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)

任何指针将不胜感激!

python string dataframe pandas

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

从pandas中的数据框中的所有列输出数据

我有一个名称的csv文件params.csv.我打开ipython qtconsole并用以下方法创建了一只熊猫dataframe:

import pandas
paramdata = pandas.read_csv('params.csv', names=paramnames)
Run Code Online (Sandbox Code Playgroud)

其中,paramnames是一个字符串对象的python列表.示例paramnames(实际列表的长度为22):

paramnames = ["id",
"fc",
"mc",
"markup",
"asplevel",
"aspreview",
"reviewpd"]
Run Code Online (Sandbox Code Playgroud)

在ipython提示符下,如果我输入paramdata并按回车键,那么我不会获得带有列和值的数据框,如Pandas网站上的示例所示.相反,我获得有关数据帧的信息.我明白了:

In[35]: paramdata
Out[35]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 59 entries, 0 to 58
Data columns:
id                    59  non-null values
fc                    59  non-null values
mc                    59  non-null values
markup                59  non-null values
asplevel              59  non-null values
aspreview             59  non-null values
reviewpd              59  non-null values
Run Code Online (Sandbox Code Playgroud)

如果我键入,paramdata['mc']那么我确实得到了mc列的预期值.我有两个问题:

(1)在pandas网站上的例子中(例如,参见 …

python pandas

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

如何使用Pandas创建随机整数的DataFrame?

我知道,如果我使用randn,

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD'))
Run Code Online (Sandbox Code Playgroud)

给了我正在寻找的东西,但是有正态分布的元素.但是,如果我只想要随机整数怎么办?

randint通过提供范围来工作,但不提供类似的数组randn.那么如何在某个范围之间使用随机整数呢?

python size shapes dataframe pandas

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

使用pandas GroupBy.agg()对同一列进行多次聚合

给出以下(完全矫枉过正的)数据框示例

import pandas as pd
import datetime as dt
df = pd.DataFrame({
         "date"    :  [dt.date(2012, x, 1) for x in range(1, 11)], 
         "returns" :  0.05 * np.random.randn(10), 
         "dummy"   :  np.repeat(1, 10)
})
Run Code Online (Sandbox Code Playgroud)

是否存在将两个不同的聚合函数应用于同一列的现有内置方法,而无需agg多次调用?

语法上错误但直观正确的方法是:

# Assume `function1` and `function2` are defined for aggregating.
df.groupby("dummy").agg({"returns":function1, "returns":function2})
Run Code Online (Sandbox Code Playgroud)

显然,Python不允许重复键.是否还有其他表达输入的方式agg?也许一个元组列表[(column, function)]会更好,允许多个函数应用于同一列?但它似乎只接受一本字典.

除了定义一个仅应用其中的两个函数的辅助函数之外,还有一个解决方法吗?(无论如何,它如何与聚合一起工作?)

python aggregate dataframe pandas pandas-groupby

95
推荐指数
3
解决办法
5万
查看次数

获得Pandas专栏的总数

目标

我有一个Pandas数据框,如下所示,有多列,想得到列的总数,MyColumn.


数据框 -df:

print df

           X           MyColumn  Y              Z   
0          A           84        13.0           69.0   
1          B           76         77.0          127.0   
2          C           28         69.0           16.0   
3          D           28         28.0           31.0   
4          E           19         20.0           85.0   
5          F           84        193.0           70.0   
Run Code Online (Sandbox Code Playgroud)

我的尝试:

我试图使用groupby和得到列的总和.sum():

Total = df.groupby['MyColumn'].sum()

print Total
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

TypeError: 'instancemethod' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)

预期产出

我原本预计输出如下:

319
Run Code Online (Sandbox Code Playgroud)

或者,我希望df使用包含总数的新row标题进行编辑TOTAL:

           X           MyColumn  Y              Z   
0          A …
Run Code Online (Sandbox Code Playgroud)

python sum dataframe pandas

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

对于有熊猫的循环 - 我什么时候应该关心?

我熟悉"矢量化"的概念,以及熊猫如何使用矢量化技术来加速计算.矢量化函数在整个系列或DataFrame上广播操作,以实现比传统迭代数据更大的加速.

但是,我很惊讶地看到很多代码(包括Stack Overflow的答案)提供了解决问题的方法,这些问题涉及使用for循环和列表推导来循环数据.阅读完文档后,对API有了不错的理解,我认为循环是"坏的",并且应该"永远"迭代数组,系列或DataFrame.那么,为什么我会不时地看到用户提出循环解决方案呢?

因此,要总结......我的问题是:
是否for循环真正的"坏"?如果不是,在什么情况下它们会比使用更传统的"矢量化"方法更好?1

1 - 虽然这个问题确实听起来有点宽泛,但事实是,当for循环通常比传统的迭代数据更好时,存在非常具体的情况.这篇文章旨在为后人捕捉这一点.

python iteration list-comprehension vectorization pandas

85
推荐指数
2
解决办法
7819
查看次数

在Pandas DataFrame对象中重新定义索引

我试图重新索引一个pandas DataFrame对象,就像这样,

From:
            a   b   c
        0   1   2   3
        1  10  11  12
        2  20  21  22

To :
           b   c
       1   2   3
      10  11  12
      20  21  22
Run Code Online (Sandbox Code Playgroud)

我正在解决这个问题,如下所示,我得到了错误的答案.关于如何做到这一点的任何线索?

>>> col = ['a','b','c']
>>> data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)
>>> data
    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22
>>> idx2 = data.a.values
>>> idx2
array([ 1, 10, 20], dtype=int64)
>>> data2 = DataFrame(data,index=idx2,columns=col[1:])
>>> data2
     b   c
1   11  12 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

根据pandas中的另一个值更改一个值

我正在尝试将我的Stata代码重新编程为Python以提高速度,我指出了PANDAS的方向.但是,我很难绕过如何处理数据.

假设我想迭代列标题'ID'中的所有值.如果该ID与特定数字匹配,那么我想更改两个对应的值FirstName和LastName.

在Stata中它看起来像这样:

replace FirstName = "Matt" if ID==103
replace LastName =  "Jones" if ID==103
Run Code Online (Sandbox Code Playgroud)

因此,这将FirstName中与ID == 103的值对应的所有值替换为Matt.

在PANDAS,我正在尝试这样的事情

df = read_csv("test.csv")
for i in df['ID']:
    if i ==103:
          ...
Run Code Online (Sandbox Code Playgroud)

不知道从哪里开始.有任何想法吗?

python pandas

81
推荐指数
5
解决办法
12万
查看次数

漂亮打印熊猫数据帧

如何将pandas数据框打印为一个漂亮的基于文本的表,如下所示?

+------------+---------+-------------+
| column_one | col_two |   column_3  |
+------------+---------+-------------+
|          0 |  0.0001 | ABCD        |
|          1 |  1e-005 | ABCD        |
|          2 |  1e-006 | long string |
|          3 |  1e-007 | ABCD        |
+------------+---------+-------------+
Run Code Online (Sandbox Code Playgroud)

python printing dataframe pandas

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