如何根据pandas中某些列中的值从DataFrame中选择行?
在SQL中我会使用:
SELECT *
FROM table
WHERE colume_name = some_value
Run Code Online (Sandbox Code Playgroud)
我试着看看熊猫文档,但没有立即找到答案.
我有一个使用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)
我将已编辑的列名存储在列表中,但我不知道如何替换列名.
我有一只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
对象是什么以及如何使用它.
删除DataFrame中的列时,我使用:
del df['column_name']
Run Code Online (Sandbox Code Playgroud)
这很有效.为什么我不能使用以下?
del df.column_name
Run Code Online (Sandbox Code Playgroud)
由于您可以访问列/系列df.column_name
,我希望这可以工作.
我有不同列中的数据,但我不知道如何提取它以将其保存在另一个变量中.
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)
似乎没有工作.
我想从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) 在学习大熊猫的过程中,我试图解决这个问题的答案已有好几个月了.我使用SAS进行日常工作,这非常适合它的核心支持.然而,由于其他许多原因,SAS作为一款软件非常糟糕.
有一天,我希望用python和pandas替换我对SAS的使用,但我目前缺乏大型数据集的核心工作流程.我不是在谈论需要分布式网络的"大数据",而是说文件太大而无法容纳在内存中,但又足够小以适应硬盘驱动器.
我的第一个想法是用于HDFStore
在磁盘上保存大型数据集,并仅将我需要的部分拉入数据帧进行分析.其他人提到MongoDB是一种更容易使用的替代品.我的问题是:
有哪些最佳实践工作流程可用于完成以下任务:
真实世界的例子将非常受欢迎,尤其是那些在"大数据"上使用熊猫的人.
编辑 - 我希望如何工作的示例:
我正在尝试找到执行这些步骤的最佳实践方法.阅读关于pandas和pytables的链接似乎附加一个新列可能是个问题.
编辑 - 特别回应杰夫的问题:
if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'
.这些操作的结果是我的数据集中每条记录的新列.我很少会在数据集中添加行.我几乎总是会创建新的列(统计/机器学习用语中的变量或特征).
我有以下索引的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
在上面的示例中添加列?
我正在尝试用Pandas获取dataframe df的行数,这是我的代码.
total_rows = df.count
print total_rows +1
Run Code Online (Sandbox Code Playgroud)
total_rows = df['First_columnn_label'].count
print total_rows +1
Run Code Online (Sandbox Code Playgroud)
两个代码片段都给我这个错误:
TypeError:+:'instancemethod'和'int'的不支持的操作数类型
我究竟做错了什么?
我知道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添加新行(具有不同的列类型)?