相关疑难解决方法(0)

如何迭代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万
查看次数

如何更改DataFrame列的顺序?

我有以下DataFrame(df):

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(10, 5))
Run Code Online (Sandbox Code Playgroud)

我通过赋值添加更多列:

df['mean'] = df.mean(1)
Run Code Online (Sandbox Code Playgroud)

如何将列移动mean到前面,即将其设置为第一列,使其他列的顺序保持不变?

python dataframe pandas

729
推荐指数
23
解决办法
76万
查看次数

如何在Pandas中处理SettingWithCopyWarning?

背景

我刚刚将我的Pandas从0.11升级到0.13.0rc1.现在,该应用程序正在弹出许多新的警告.其中一个是这样的:

E:\FinReporter\FM_EXT.py:449: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
  quote_df['TVol']   = quote_df['TVol']/TVOL_SCALE
Run Code Online (Sandbox Code Playgroud)

我想知道究竟是什么意思?我需要改变什么吗?

如果我坚持使用,我应该如何暂停警告quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE

给出错误的函数

def _decode_stock_quote(list_of_150_stk_str):
    """decode the webpage and return dataframe"""

    from cStringIO import StringIO

    str_of_all = "".join(list_of_150_stk_str)

    quote_df = pd.read_csv(StringIO(str_of_all), sep=',', names=list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg')) #dtype={'A': object, 'B': object, 'C': np.float64}
    quote_df.rename(columns={'A':'STK', 'B':'TOpen', 'C':'TPCLOSE', 'D':'TPrice', 'E':'THigh', 'F':'TLow', 'I':'TVol', 'J':'TAmt', 'e':'TDate', 'f':'TTime'}, inplace=True)
    quote_df = quote_df.ix[:,[0,3,2,1,4,5,8,9,30,31]]
    quote_df['TClose'] = quote_df['TPrice']
    quote_df['RT'] …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas chained-assignment

536
推荐指数
16
解决办法
58万
查看次数

将特定选定列作为副本提取到新DataFrame

我有一个包含4列的pandas DataFrame,我想创建一个只有三列的 DataFrame .这个问题类似于:从数据框中提取特定列,但是对于不是R的pandas.以下代码不起作用,引发错误,并且当然不是这种方式的pandasnic方法.

import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new = pd.DataFrame(zip(old.A, old.C, old.D)) # raises TypeError: data argument can't be an iterator 
Run Code Online (Sandbox Code Playgroud)

什么是pandasnic方式呢?

python pandas chained-assignment

138
推荐指数
7
解决办法
29万
查看次数

使用loc和使用方括号来过滤Pandas/Python中的列有什么区别?

我注意到在Pandas DataFrame中选择一个列的三种方法:

使用loc选择列的第一种方法:

df_new = df.loc[:, 'col1']
Run Code Online (Sandbox Code Playgroud)

第二种方法 - 看起来更简单,更快捷:

df_new = df['col1']
Run Code Online (Sandbox Code Playgroud)

第三种方法 - 最方便:

df_new = df.col1
Run Code Online (Sandbox Code Playgroud)

这三种方法有区别吗?我不这么认为,在这种情况下我宁愿使用第三种方法.

我很好奇为什么似乎有三种方法可以做同样的事情.

python dataframe pandas

40
推荐指数
2
解决办法
8096
查看次数

按标签(pandas)选择多个列

我一直在寻找通过python文档和论坛选择列的方法,但索引列上的每个示例都过于简单.

假设我有一个10 x 10的数据帧

df = DataFrame(randn(10, 10), index=range(0,10), columns=['A', 'B', 'C', 'D','E','F','G','H','I','J'])
Run Code Online (Sandbox Code Playgroud)

到目前为止,所有文档都只是一个索引的简单例子

subset = df.loc[:,'A':'C']
Run Code Online (Sandbox Code Playgroud)

要么

subset = df.loc[:,'C':]
Run Code Online (Sandbox Code Playgroud)

但是当我尝试索引多个非顺序列时,我得到一个错误,就像这样

subset = df.loc[:,('A':'C', 'E')]
Run Code Online (Sandbox Code Playgroud)

如果我想从A到C,E和G中选择A列,我将如何在Pandas中编入索引?看来这个逻辑不起作用

subset = df.loc[:,('A':'C', 'E', 'G':'I')]
Run Code Online (Sandbox Code Playgroud)

我觉得解决方案非常简单,但我无法解决这个错误.谢谢!

python pandas

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

在read_csv之后选择pandas数据帧中的列时出现键错误

我正在尝试将CS​​V文件读入pandas数据帧并选择一列,但不断收到密钥错误.

该文件成功读入,我可以在iPython笔记本中查看数据帧,但是当我想选择除第一个列以外的列时,它会抛出一个键错误.

我正在使用此代码:

import pandas as pd

transactions = pd.read_csv('transactions.csv',low_memory=False, delimiter=',', header=0, encoding='ascii')
transactions['quarter']
Run Code Online (Sandbox Code Playgroud)

这是我正在处理的文件:https: //www.dropbox.com/s/imd7hq2iq23hf8o/transactions.csv?dl = 0

谢谢!

python csv pandas

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

熊猫:替换为.ix

鉴于对pandas 0.20.0的更新和弃用.ix,我想知道使用剩余的.loc和最好的方法来获得相同的结果是什么.iloc.我刚回答了这个问题,但第二个选项(不使用.ix)似乎效率低下且冗长.

片段:

print df.iloc[df.loc[df['cap'].astype(float) > 35].index, :-1]
Run Code Online (Sandbox Code Playgroud)

这是使用条件和索引位置过滤时的正确方法吗?

python indexing pandas

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

Pandas Pivot Table手动排序列

对于给定的数据框:

UUT                  testa  testb  testc  testd
DateTime                                
2017-11-21 18:47:29    1.0    1.0    1.0    3.0
2017-11-21 18:47:30    1.0    2.0    1.0    4.0
2017-11-21 18:47:31    1.0    2.0    5.0    2.0
2017-11-21 18:47:32    1.0    2.0    5.0    1.0
2017-11-21 18:47:33    1.0    2.0    5.0    4.0
2017-11-21 18:47:34    1.0    2.0    5.0    1.0
Run Code Online (Sandbox Code Playgroud)

如果我想要以下顺序,我怎么能手动重新排列我想要的列?

testc, testd, testa, testb
Run Code Online (Sandbox Code Playgroud)

因此表格和情节将以这种方式:

UUT                  testc  testd  testa  testb  
DateTime                                         
2017-11-21 18:47:29    1.0    3.0    1.0    1.0  
2017-11-21 18:47:30    1.0    4.0    1.0    2.0  
2017-11-21 18:47:31    5.0    2.0    1.0    2.0  
2017-11-21 18:47:32    5.0    1.0    1.0    2.0  
2017-11-21 …
Run Code Online (Sandbox Code Playgroud)

python sorting pivot-table pandas

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

从 Pandas 中的数据框中打印列的样本集?

如何打印(在终端中)来自 Pandas 数据帧的列子集?

我不想从数据框中删除任何列;我只想在终端中看到几列,以了解数据是如何通过的。

现在,我可以 print(df2.head(10))打印数据框的前 10 行,但是如何选择要打印的几列?您可以按索引号和/或名称选择列吗?

python python-3.x pandas

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