我有一只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对象是什么以及如何使用它.
我从这里的pandas DataFrame文档开始:http://pandas.pydata.org/pandas-docs/stable/dsintro.html
我想迭代地使用时间序列计算中的值填充DataFrame.基本上,我想用列A,B和时间戳行初始化DataFrame,全部为0或全部为NaN.
然后,我会添加初始值并检查此数据,计算前一行中的新行,row[A][t] = row[A][t-1]+1或者说左右.
我目前正在使用下面的代码,但我觉得它有点难看,必须有一种方法可以直接使用DataFrame,或者只是更好的方式.注意:我使用的是Python 2.7.
import datetime as dt
import pandas as pd
import scipy as s
if __name__ == '__main__':
base = dt.datetime.today().date()
dates = [ base - dt.timedelta(days=x) for x in range(0,10) ]
dates.sort()
valdict = {}
symbols = ['A','B', 'C']
for symb in symbols:
valdict[symb] = pd.Series( s.zeros( len(dates)), dates )
for thedate in dates:
if thedate > dates[0]:
for symb in valdict:
valdict[symb][thedate] = 1+valdict[symb][thedate - dt.timedelta(days=1)]
print valdict
Run Code Online (Sandbox Code Playgroud) 我有一个数据帧..
s1 = pd.Series([5, 6, 7])
s2 = pd.Series([7, 8, 9])
df = pd.DataFrame([list(s1), list(s2)], columns = ["A", "B", "C"])
A B C
0 5 6 7
1 7 8 9
[2 rows x 3 columns]
Run Code Online (Sandbox Code Playgroud)
我需要添加第一行[2,3,4]才能获得..
A B C
0 2 3 4
1 5 6 7
2 7 8 9
Run Code Online (Sandbox Code Playgroud)
我已经尝试了append()和concat()函数,但不知怎的,我找不到正确的方法如何做到这一点.
有任何想法吗?有没有直接的方法如何添加/插入数据帧系列?
正如TimeComplexity文档中所见,Python的list类型实现使用数组.
因此,如果正在使用数组并且我们做了一些追加,最终您将不得不重新分配空间并将所有信息复制到新空间.
毕竟,怎么可能是O(1)最坏的情况?
我有一个处理DataFrame的函数,主要是将数据处理成桶,在特定列中使用创建二进制矩阵的特征pd.get_dummies(df[col]).
为了避免一次使用此函数处理我的所有数据(内存不足并导致iPython崩溃),我使用以下方法将大型DataFrame分解为块:
chunks = (len(df) / 10000) + 1
df_list = np.array_split(df, chunks)
Run Code Online (Sandbox Code Playgroud)
pd.get_dummies(df)会自动创建一个基于内容的新栏目df[col]和这些都有可能为每个不同df在df_list.
处理完毕后,我使用以下方法将DataFrame连接在一起:
for i, df_chunk in enumerate(df_list):
print "chunk", i
[x, y] = preprocess_data(df_chunk)
super_x = pd.concat([super_x, x], axis=0)
super_y = pd.concat([super_y, y], axis=0)
print datetime.datetime.utcnow()
Run Code Online (Sandbox Code Playgroud)
第一个块的处理时间是完全可以接受的,然而,它每块增长!这与它没有关系,preprocess_data(df_chunk)因为没有理由增加它.由于呼叫的结果,是否会增加时间pd.concat()?
请参阅下面的日志:
chunks 6
chunk 0
2016-04-08 00:22:17.728849
chunk 1
2016-04-08 00:22:42.387693
chunk 2
2016-04-08 00:23:43.124381
chunk 3
2016-04-08 00:25:30.249369
chunk 4
2016-04-08 00:28:11.922305
chunk 5
2016-04-08 00:32:00.357365 …Run Code Online (Sandbox Code Playgroud) python performance concatenation processing-efficiency pandas
在 pandas 1.4.0 中:append()已被弃用,文档说可以使用concat()。
FutureWarning:frame.append 方法已弃用,并将在未来版本中从 pandas 中删除。使用 pandas.concat 代替。
有问题的代码块:
def generate_features(data, num_samples, mask):
"""
The main function for generating features to train or evaluate on.
Returns a pd.DataFrame()
"""
logger.debug("Generating features, number of samples", num_samples)
features = pd.DataFrame()
for count in range(num_samples):
row, col = get_pixel_within_mask(data, mask)
input_vars = get_pixel_data(data, row, col)
features = features.append(input_vars)
print_progress(count, num_samples)
return features
Run Code Online (Sandbox Code Playgroud)
这是我尝试过但不起作用的两个选项:
features = pd.concat([features],[input_vars])
Run Code Online (Sandbox Code Playgroud)
和
pd.concat([features],[input_vars])
Run Code Online (Sandbox Code Playgroud)
这是已弃用并引发错误的行:
features = features.append(input_vars)
Run Code Online (Sandbox Code Playgroud) 我正在尝试用另一个单元格填充数据框中的单元格。我正在使用这一行:
submission.iloc[i, coli] = train2.iloc[i2, coli-1]
Run Code Online (Sandbox Code Playgroud)
我收到此错误行:
IndexError:iloc 无法放大其目标对象
这是什么原因?
您好,我想将字典附加到 DataFrame,但在这个字典中我没有任何索引值。我还需要从“KP”值中删除除“1393”之外的所有内容。这看起来像这样:
对此 df:在此处输入图像描述
我想像这样附加字典:
dict = {'KP': [1.0 1393
Name: KP, dtype: int64],
'Wiek': [Timedelta('176 days 12:59:43.042156102')],
'KY1': [113.0],
'OKO': [57.51],
'GS': [10.59],
'T': [654.31],
'MP': [58.9]}
Run Code Online (Sandbox Code Playgroud)
我试试这个:
dict = {'KP': [1.0 1393
Name: KP, dtype: int64],
'Wiek': [Timedelta('176 days 12:59:43.042156102')],
'KY1': [113.0],
'OKO': [57.51],
'GS': [10.59],
'T': [654.31],
'MP': [58.9]}
Run Code Online (Sandbox Code Playgroud)
但什么也没发生, df 仍然相同,我没有收到任何错误。我尝试将此字典转换为列表并将列表作为行附加到 df 但我得到了相同的结果。
好的,我试试这个:
df.append(dict,ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
我得到这个输出: 在此处输入图像描述
这还不够好,我需要清晰的数据。
I am trying to create a DataFrame object for my spam classifier.It's supposed to contain two columns: 'messages' and 'class'. However when I use the dataframe.append function to add emails as 'messages' to my dataframe along with the folder name as 'class', I'm getting this error:
AttributeError: 'DataFrame' object has no attribute 'append'
For this I initially created a Dataframe as follow
data = DataFrame({'message': [], 'class': []})
I tried to use the DataFrame.append() function for adding the spam and …
是否有像熊猫所描述的更高级的功能?通常我会继续:
r = pd.DataFrame(np.random.randn(1000), columns = ['A'])
r.describe()
Run Code Online (Sandbox Code Playgroud)
我会得到一个很好的总结.就像这个:
A
count 1000.000000
mean 0.010230
std 0.982562
min -2.775969
25% -0.664840
50% 0.015452
75% 0.694440
max 3.101434
Run Code Online (Sandbox Code Playgroud)
我可以在statsmodels或scipy中找到更精细的东西吗?
我有麻烦list的lists,以pandas数据帧.
这是我的数据:
list_of_lists = np.array(hazard)
[['13-06-2016' '2.0' '1.0' '3.0' '88.0' '0.0' '72.0' '7.27']
['18-06-2016' '1.0' '0.0' '3.0' '85.5' '0.0' '77.0' '8.05']
['22-06-2016' '3.0' '0.0' '5.0' '91.5' '0.0' '66.0' '7.54']
['26-06-2016' '3.0' '2.0' '4.0' '89.6' '1.0' '74.0' '10.0']
['01-07-2016' '3.0' '0.0' '1.0' '88.9' '0.0' '72.0' '6.75']
['27-08-2016' '7.0' '4.0' '2.0' '81.8' '2.0' '91.0' '8.79']
['01-09-2016' '0.0' '0.0' '1.0' '59.3' '1.0' '46.0' '6.92']
['11-09-2016' '2.0' '1.0' '4.0' '91.7' '0.0' '71.0' '6.84']
['16-09-2016' '0.0' '0.0' '1.0' '81.8' …Run Code Online (Sandbox Code Playgroud) python ×12
pandas ×11
dataframe ×5
append ×2
numpy ×1
performance ×1
python-2.7 ×1
rows ×1
statistics ×1