标签: pandas

根据pandas中列的值从DataFrame中选择行

如何根据pandas中某些列中的值从DataFrame中选择行?
在SQL中我会使用:

SELECT *
FROM table
WHERE colume_name = some_value
Run Code Online (Sandbox Code Playgroud)

我试着看看熊猫文档,但没有立即找到答案.

python dataframe pandas

1649
推荐指数
15
解决办法
230万
查看次数

重命名pandas中的列

我有一个使用pandas和列标签的DataFrame,我需要编辑它来替换原始列标签.

我想更改A原始列名称所在的DataFrame 中的列名:

['$a', '$b', '$c', '$d', '$e'] 
Run Code Online (Sandbox Code Playgroud)

['a', 'b', 'c', 'd', 'e'].
Run Code Online (Sandbox Code Playgroud)

我将已编辑的列名存储在列表中,但我不知道如何替换列名.

python replace rename dataframe pandas

1601
推荐指数
32
解决办法
237万
查看次数

如何迭代Pandas中的DataFrame中的行?

我有一只DataFrame熊猫:

import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df
Run Code Online (Sandbox Code Playgroud)

输出:

   c1   c2
0  10  100
1  11  110
2  12  120
Run Code Online (Sandbox Code Playgroud)

现在我想迭代这个帧的行.对于每一行,我希望能够通过列的名称访问其元素(单元格中的值).例如:

for row in df.rows:
   print row['c1'], row['c2']
Run Code Online (Sandbox Code Playgroud)

是否有可能在熊猫中做到这一点?

我发现了类似的问题.但它没有给我我需要的答案.例如,建议使用:

for date, row in df.T.iteritems():
Run Code Online (Sandbox Code Playgroud)

要么

for row in df.iterrows():
Run Code Online (Sandbox Code Playgroud)

但我不明白row对象是什么以及如何使用它.

python rows dataframe pandas

1551
推荐指数
28
解决办法
199万
查看次数

按列名从pandas DataFrame中删除列

删除DataFrame中的列时,我使用:

del df['column_name']
Run Code Online (Sandbox Code Playgroud)

这很有效.为什么我不能使用以下?

del df.column_name
Run Code Online (Sandbox Code Playgroud)

由于您可以访问列/系列df.column_name,我希望这可以工作.

python dataframe pandas

1136
推荐指数
15
解决办法
150万
查看次数

在pandas数据框中选择多个列

我有不同列中的数据,但我不知道如何提取它以将其保存在另一个变量中.

index  a   b   c
1      2   3   4
2      3   4   5
Run Code Online (Sandbox Code Playgroud)

我该如何选择'a','b'并保存到DF1?

我试过了

df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
Run Code Online (Sandbox Code Playgroud)

似乎没有工作.

python select dataframe pandas

938
推荐指数
19
解决办法
196万
查看次数

从pandas DataFrame列标题中获取列表

我想从pandas DataFrame中获取列标题列表.DataFrame将来自用户输入,因此我不知道将会有多少列或将调用它们.

例如,如果我给这样的DataFrame:

>>> my_dataframe
    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7
5   4    8    3
6   8    2    8
7   9    9   10
8   6    6    4
9  10   10    7
Run Code Online (Sandbox Code Playgroud)

我想得到一个如下所示的列表:

>>> header_list
['y', 'gdp', 'cap']
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

914
推荐指数
13
解决办法
157万
查看次数

使用熊猫的"大数据"工作流程

在学习大熊猫的过程中,我试图解决这个问题的答案已有好几个月了.我使用SAS进行日常工作,这非常适合它的核心支持.然而,由于其他许多原因,SAS作为一款软件非常糟糕.

有一天,我希望用python和pandas替换我对SAS的使用,但我目前缺乏大型数据集的核心工作流程.我不是在谈论需要分布式网络的"大数据",而是说文件太大而无法容纳在内存中,但又足够小以适应硬盘驱动器.

我的第一个想法是用于HDFStore在磁盘上保存大型数据集,并仅将我需要的部分拉入数据帧进行分析.其他人提到MongoDB是一种更容易使用的替代品.我的问题是:

有哪些最佳实践工作流程可用于完成以下任务:

  1. 将平面文件加载到永久的磁盘数据库结构中
  2. 查询该数据库以检索数据以提供给pandas数据结构
  3. 在操作pandas中的片段后更新数据库

真实世界的例子将非常受欢迎,尤其是那些在"大数据"上使用熊猫的人.

编辑 - 我希望如何工作的示例:

  1. 迭代导入大型平面文件并将其存储在永久的磁盘数据库结构中.这些文件通常太大而无法放入内存中.
  2. 为了使用Pandas,我想读取这些数据的子集(通常一次只有几列),它们可以适合内存.
  3. 我将通过对所选列执行各种操作来创建新列.
  4. 然后我必须将这些新列附加到数据库结构中.

我正在尝试找到执行这些步骤的最佳实践方法.阅读关于pandas和pytables的链接似乎附加一个新列可能是个问题.

编辑 - 特别回应杰夫的问题:

  1. 我正在构建消费者信用风险模型.数据种类包括电话,SSN和地址特征; 财产价值; 犯罪记录,破产等贬损信息......我每天使用的数据集平均有近1,000到2,000个字段的混合数据类型:数字和字符数据的连续,名义和序数变量.我很少附加行,但我会执行许多创建新列的操作.
  2. 典型操作涉及使用条件逻辑将多个列组合到新的复合列中.例如,if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'.这些操作的结果是我的数据集中每条记录的新列.
  3. 最后,我想将这些新列附加到磁盘上的数据结构中.我将重复第2步,使用交叉表和描述性统计数据探索数据,试图找到有趣,直观的模型关系.
  4. 典型的项目文件通常约为1GB.文件被组织成一种行,其中一行包括消费者数据的记录.每行对每条记录都有相同的列数.情况总是如此.
  5. 在创建新列时,我很少会按行进行子集化.但是,在创建报告或生成描述性统计信息时,对行进行子集化非常常见.例如,我可能想为特定的业务线创建一个简单的频率,比如零售信用卡.要做到这一点,除了我要报告的列之外,我只会选择那些业务线=零售的记录.但是,在创建新列时,我会提取所有数据行,只提取操作所需的列.
  6. 建模过程要求我分析每一列,寻找与某些结果变量的有趣关系,并创建描述这些关系的新化合物列.我探索的列通常以小集合完成.例如,我将专注于一组20个列,只处理属性值并观察它们与贷款违约的关系.一旦探索了这些并创建了新的列,我就转到另一组列,比如大学教育,然后重复这个过程.我正在做的是创建候选变量来解释我的数据和某些结果之间的关系.在这个过程的最后,我应用了一些学习技术,从这些复合列中创建一个方程式.

我很少会在数据集中添加行.我几乎总是会创建新的列(统计/机器学习用语中的变量或特征).

python hdf5 large-data mongodb pandas

913
推荐指数
14
解决办法
27万
查看次数

在Python pandas中向现有DataFrame添加新列

我有以下索引的DataFrame与命名列和行不连续数字:

          a         b         c         d
2  0.671399  0.101208 -0.181532  0.241273
3  0.446172 -0.243316  0.051767  1.577318
5  0.614758  0.075793 -0.451460 -0.012493
Run Code Online (Sandbox Code Playgroud)

我想'e'在现有数据框中添加一个新列,并且不希望更改数据框中的任何内容(即,新列始终与DataFrame具有相同的长度).

0   -0.335485
1   -1.166658
2   -0.385571
dtype: float64
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的版本join,append,merge,但我没有得到我想要的结果,只在最错误.如何e在上面的示例中添加列?

python dataframe pandas chained-assignment

887
推荐指数
23
解决办法
182万
查看次数

如何获取Pandas数据帧的行数?

我正在尝试用Pandas获取dataframe df的行数,这是我的代码.

方法1:

total_rows = df.count
print total_rows +1
Run Code Online (Sandbox Code Playgroud)

方法2:

total_rows = df['First_columnn_label'].count
print total_rows +1
Run Code Online (Sandbox Code Playgroud)

两个代码片段都给我这个错误:

TypeError:+:'instancemethod'和'int'的不支持的操作数类型

我究竟做错了什么?

python dataframe pandas

786
推荐指数
12
解决办法
154万
查看次数

在pandas DataFrame中添加一行

我知道pandas旨在加载完全填充DataFrame但我需要创建一个空的DataFrame,然后逐个添加行.做这个的最好方式是什么 ?

我成功创建了一个空的DataFrame:

res = DataFrame(columns=('lib', 'qty1', 'qty2'))
Run Code Online (Sandbox Code Playgroud)

然后我可以添加一个新行并填充一个字段:

res = res.set_value(len(res), 'qty1', 10.0)
Run Code Online (Sandbox Code Playgroud)

它工作但似乎很奇怪: - /(它添加字符串值失败)

如何向我的DataFrame添加新行(具有不同的列类型)?

python append dataframe pandas

731
推荐指数
18
解决办法
108万
查看次数