我有一只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(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到前面,即将其设置为第一列,使其他列的顺序保持不变?
我刚刚将我的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) 我有一个包含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方式呢?
我注意到在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文档和论坛选择列的方法,但索引列上的每个示例都过于简单.
假设我有一个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)
我觉得解决方案非常简单,但我无法解决这个错误.谢谢!
我正在尝试将CSV文件读入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
谢谢!
鉴于对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)
这是使用条件和索引位置过滤时的正确方法吗?
对于给定的数据框:
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) 如何打印(在终端中)来自 Pandas 数据帧的列子集?
我不想从数据框中删除任何列;我只想在终端中看到几列,以了解数据是如何通过的。
现在,我可以 print(df2.head(10))打印数据框的前 10 行,但是如何选择要打印的几列?您可以按索引号和/或名称选择列吗?
pandas ×10
python ×10
dataframe ×4
csv ×1
indexing ×1
pivot-table ×1
python-3.x ×1
rows ×1
sorting ×1