前锋python百度云_关于python:使用索引在pandas DataFrame中设置特定单元格的值
我创建了一个熊猫数据框架
df = DataFrame(index=['A','B','C'], columns=['x','y'])
得到了这个
x y
A NaN NaN
B NaN NaN
C NaN NaN
然后我想给特定的单元格赋值,例如行"c"和列"x"。我期望得到这样的结果:
x y
A NaN NaN
B NaN NaN
C 10 NaN
用这个代码:
df.xs('C')['x'] = 10
但是df的内容没有改变。同样,数据帧中只有EDOCX1[1]。
有什么建议吗?
不要使用"链接索引"(df['x']['C']),使用df.ix['x','C']。
索引访问的顺序需要是:dataframe[column (series)] [row (Series index)],而许多人(包括我自己)更习惯于dataframe[row][column]的顺序。作为一个Matlab和R程序员,后者对我来说更直观,但显然不是熊猫的工作方式。
我试过了,但最后添加了另一个行名x和另一个列名c。您必须先添加行,然后再添加列。所以df.ix['c','x']=10
致@yariv评论。警告:从0.20.0开始,.ix索引器已被弃用,取而代之的是更严格的.iloc和.loc索引器。pandas.pydata.org/pandas docs/stable/generated/…。df.at看起来像是在到处乱窜。
ruktech的回答是,df.set_value('C', 'x', 10)走的速度,远比我建议下面的选项。然而,它已被slated for deprecation。
什么是.iat/.at前锋,和方法。
为什么不工作:df.xs('C')['x']=10
df.xs('C')默认,返回一个新的下列复制数据,从而
df.xs('C')['x']=10
这个新的修改下列只读。
df['x']归来df下列A视图等
df['x']['C'] = 10
df本身的修改。
警告:这是很难预测,如果在A或A拷贝操作返回的视图。这是一个原因,是分配上的文档"链式索引"。
因此,建议的替代。
df.at['C', 'x'] = 10
这是df修改。
In [18]: %timeit df.set_value('C', 'x', 10)
100000 loops, best of 3: 2.9 μs per loop
In [20]: %timeit df['x']['C'] = 10
100000 loops, best of 3: 6.31 μs per loop
In [81]: %timeit df.at['C', 'x'] = 10
100000 loops, best of 3: 9.2 μs per loop
API中没有df.x这样的东西。你什么意思?
什么版本的熊猫?
@smci:'x'是df中一列的名称。df.x返回一个Series,值在x列中。我将把它改为df['x'],因为这个符号可以与任何列名一起使用(与点符号不同),我认为它更清晰。
我知道,我以为你是在说df.x是df.xs, df.ix旁边的一种未知的新方法。
df.xs(..., copy=True)返回一个副本,这是默认行为。df.xs(..., copy=False)返回原件。
根据维护人员的说法,这不是设置值的推荐方法。请参阅stackoverflow.com/a/21287235/1579844和我的答案。
关于ix和loc的一些问题,熊猫的文档可能更清晰。
有时,如果您有一个像datetime这样的大索引列,那么链接会很痛苦。你不能每次都打。
确实应该使用更好的名称,使用x和C可能会令人困惑
在我的例子中,我混合了索引位置和列标签。我找到了让它工作的方法:df_temp.iat[0, df_temp.columns.get_loc('Cash')] = df_temp['Cash'].iloc[0] + start_val。
更新:.set _价值法是要被取消。.iat /特别是好的文档提供replacements,不幸的小熊猫
这样做是最快的方式使用_值集。本方法是更快的方法比.ix~100倍。例如:
df.set_value('C', 'x', 10)
它甚至比df['x']['C'] = 10更好。
1000个循环,每个循环最好3:195&181;s"df['x'][c']=10"1000个循环,每个循环最好3:310&181;s"df.ix['c','x']=10"1000个循环,每个循环最好3:189&181;s"df.x s('c',copy=false)['x']=10"1000个循环,每个循环最好3:7.22&181;s"df.set value('c','x',10)"
这是否也适用于向数据帧添加新行/列?
是的(熊猫0.16.2)
是否可以使用该选项将值设置为df=df.append(df.sum(numeric_only=True),ignore_index=True)?
所以,你可以使用一个查找.loc湖泊在使用条件:
df.loc[df[] == , []] =
哪里是你想柱变量对检查和是你想要添加到柱(柱可以新的或已经存在的那一个)。是你想要添加的价值在那一列/行。
本例子是一个不精确的问题在手的工作,但它可能是有用的为人,想添加一个特定的值基于一种状态。
第二列需要在括号中,否则所有列都将被值覆盖。像这样:df.loc[df['age']==3, ['age-group']] = 'toddler'。
谢谢@piizei!
单(根据演练和维护)集A的值是:
df.ix['x','C']=10
使用链式索引(df['x']['C'])可能导致问题。
湖:
stackoverflow.com http:/ / / / / 21287235 1579844
http://pandas.pydata.org /熊猫/ dev / indexing.html #文档的索引视图和拷贝
http:/ / / /熊猫/拉github.com pydata 6031号
不推荐使用ix:pandas docs.github.io/pandas docs travis/…
尝试使用df.loc[row_index,col_indexer] = value
欢迎使用堆栈溢出!请考虑编辑您的文章,以添加更多关于您的代码所做的以及它将解决问题的原因的解释。一个大部分只包含代码的答案(即使它有效)通常不会帮助操作人员理解他们的问题。如果只是一个猜测,建议你不要发布答案。一个好的答案将有一个合理的理由来解释为什么它可以解决OP的问题。
这是唯一的东西为我工作!
df.loc['C', 'x'] = 10
了解更多关于.loc这里。
.loc是否取代了.iat/.at?
at与loc相似,两者都提供基于标签的查找。如果只需要获取或设置数据帧或序列中的单个值,请使用at。从帕达斯博士
很好,当我的索引元素是数值时,这对我很有用。
这对数字索引和字符串索引的组合不起作用。
在我的例子,我选择改变它在细胞
for index, row in result.iterrows():
if np.isnan(row['weight']):
result.at[index, 'weight'] = 0.0
结果是一个"量"列的DataField
你可以使用.iloc。
df.iloc[[2], [0]] = 10
此方法似乎不支持多个值,例如df.iloc[[2:8], [0]] = [2,3,4,5,6,7],而方法df.loc()本身支持这些值。
set_value()是过时的。
从释放的0.23.4"熊猫","未来"……
>>> df
Cars Prices (U$)
0 Audi TT 120.0
1 Lamborghini Aventador 245.0
2 Chevrolet Malibu 190.0
>>> df.set_value(2, 'Prices (U$)', 240.0)
__main__:1: FutureWarning: set_value is deprecated and will be removed in a future release.
Please use .at[] or .iat[] accessors instead
Cars Prices (U$)
0 Audi TT 120.0
1 Lamborghini Aventador 245.0
2 Chevrolet Malibu 240.0
这是建议,这是一个演示如何使用他们:
行/列的整数位置。
>>> df.iat[1, 1] = 260.0
>>> df
Cars Prices (U$)
0 Audi TT 120.0
1 Lamborghini Aventador 260.0
2 Chevrolet Malibu 240.0
的行/列的标签
>>> df.at[2,"Cars"] ="Chevrolet Corvette"
>>> df
Cars Prices (U$)
0 Audi TT 120.0
1 Lamborghini Aventador 260.0
2 Chevrolet Corvette 240.0
参考文献:
pandas.dataframe.iat
pandas.dataframe.at
df.loc['c','x']=10本想和CTH变化值。xth柱。
除了上面的答案,这是一个基准比较不同的方式添加到已存在的数据行下列。它的显示是使用AT或设定值是最有效的方式(至少dataframes大型论文试验条件)。
创建新的下列for each row和……
……附加信息(13)
……串联式(13.1)IT
在另一个容器商店的所有新的行,第一,转换到新添加一次和下列…
容器列表的列表(S)= 2.0)
集装箱的词典列表(S = 1.9)
新的全iterate过下列预分配,和所有的列和行填充使用
……在(0.6)
……集值(0.4)_
现有的测试,包括下列的行和列和1000万NumPy是用随机值。这是添加新的行下列100。
湖下面的代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 21 16:38:46 2018
@author: gebbissimo
"""
import pandas as pd
import numpy as np
import time
NUM_ROWS = 100000
NUM_COLS = 1000
data = np.random.rand(NUM_ROWS,NUM_COLS)
df = pd.DataFrame(data)
NUM_ROWS_NEW = 100
data_tot = np.random.rand(NUM_ROWS + NUM_ROWS_NEW,NUM_COLS)
df_tot = pd.DataFrame(data_tot)
DATA_NEW = np.random.rand(1,NUM_COLS)
#%% FUNCTIONS
# create and append
def create_and_append(df):
for i in range(NUM_ROWS_NEW):
df_new = pd.DataFrame(DATA_NEW)
df = df.append(df_new)
return df
# create and concatenate
def create_and_concat(df):
for i in range(NUM_ROWS_NEW):
df_new = pd.DataFrame(DATA_NEW)
df = pd.concat((df, df_new))
return df
# store as dict and
def store_as_list(df):
lst = [[] for i in range(NUM_ROWS_NEW)]
for i in range(NUM_ROWS_NEW):
for j in range(NUM_COLS):
lst[i].append(DATA_NEW[0,j])
df_new = pd.DataFrame(lst)
df_tot = df.append(df_new)
return df_tot
# store as dict and
def store_as_dict(df):
dct = {}
for j in range(NUM_COLS):
dct[j] = []
for i in range(NUM_ROWS_NEW):
dct[j].append(DATA_NEW[0,j])
df_new = pd.DataFrame(dct)
df_tot = df.append(df_new)
return df_tot
# preallocate and fill using .at
def fill_using_at(df):
for i in range(NUM_ROWS_NEW):
for j in range(NUM_COLS):
#print("i,j={},{}".format(i,j))
df.at[NUM_ROWS+i,j] = DATA_NEW[0,j]
return df
# preallocate and fill using .at
def fill_using_set(df):
for i in range(NUM_ROWS_NEW):
for j in range(NUM_COLS):
#print("i,j={},{}".format(i,j))
df.set_value(NUM_ROWS+i,j,DATA_NEW[0,j])
return df
#%% TESTS
t0 = time.time()
create_and_append(df)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))
t0 = time.time()
create_and_concat(df)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))
t0 = time.time()
store_as_list(df)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))
t0 = time.time()
store_as_dict(df)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))
t0 = time.time()
fill_using_at(df_tot)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))
t0 = time.time()
fill_using_set(df_tot)
t1 = time.time()
print('Needed {} seconds'.format(t1-t0))
以下是所有用户为按整数和字符串索引的数据帧提供的有效解决方案的摘要。
df.iloc、df.loc和df。对于这两种数据帧类型,df.iloc仅适用于行/列整数索引,df.loc和df.at支持使用列名称和/或整数索引设置值。
当指定的索引不存在时,df.loc和df.at都会将新插入的行/列追加到现有的数据帧,但df.iloc会引发"indexerror:位置索引器超出界限"。在Python2.7和3.7中测试的一个工作示例如下:
import numpy as np, pandas as pd
df1 = pd.DataFrame(index=np.arange(3), columns=['x','y','z'])
df1['x'] = ['A','B','C']
df1.at[2,'y'] = 400
# rows/columns specified does not exist, appends new rows/columns to existing data frame
df1.at['D','w'] = 9000
df1.loc['E','q'] = 499
# using df[] == to retrieve target rows
df1.at[df1['x']=='B', 'y'] = 10000
df1.loc[df1['x']=='B', ['z','w']] = 10000
# using a list of index to setup values
df1.iloc[[1,2,4], 2] = 9999
df1.loc[[0,'D','E'],'w'] = 7500
df1.at[[0,2,"D"],'x'] = 10
df1.at[:, ['y', 'w']] = 8000
df1
>>> df1
x y z w q
0 10 8000 NaN 8000 NaN
1 B 8000 9999 8000 NaN
2 10 8000 9999 8000 NaN
D 10 8000 NaN 8000 NaN
E NaN 8000 9999 8000 499.0
.iat/.at是很好的解决方案。假设你有这个简单的数据框架:
A B C
0 1 8 4
1 3 9 6
2 22 33 52
如果我们想修改单元格的值,[0,"A"]u可以使用这些解决方案之一:
df.iat[0,0] = 2
df.at[0,'A'] = 2
下面是一个完整的例子,如何使用iat来获取和设置单元格的值:
def prepossessing(df):
for index in range(0,len(df)):
df.iat[index,0] = df.iat[index,0] * 2
return df
Y_培训时间:
0
0 54
1 15
2 15
3 8
4 31
5 63
6 11
在调用了iat要更改以使每个单元格的值乘以2的前置函数后进行y训练:
0
0 108
1 30
2 30
3 16
4 62
5 126
6 22
所以,你可以从0.21.1 .at版使用方法。有一些差异,相比.locAS与.loc熊猫。在这里,但它具有单值替换
如果你想更改的值不完整的行,但只有一些列:
x = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
x.iloc[1] = dict(A=10, B=-10)
我认为这是寻找一个主题,我把一iterate通过下列方式和更新它的查找值从第二下列。这里是我的代码。
src_df = pd.read_sql_query(src_sql,src_connection)
for index1, row1 in src_df.iterrows():
for index, row in vertical_df.iterrows():
src_df.set_value(index=index1,col=u'etl_load_key',value=etl_load_key)
if (row1[u'src_id'] == row['SRC_ID']) is True:
src_df.set_value(index=index1,col=u'vertical',value=row['VERTICAL'])
前锋python百度云_关于python:使用索引在pandas DataFrame中设置特定单元格的值相关推荐
- python写入csv指定单元格_使用python将值插入csv中的特定单元格
我想知道是否有办法用python将数据插入到csv文件的特定单元格中.可以说我有变量"数据",它存储值" 300".如何将这些数据添加到csv文件的第3行第2列 ...
- opencv3计算机视觉python百度云_OpenCV3计算机视觉Python语言实现笔记(二)
1. 图像与原始字节之间的转换 从概念上讲,一个字节能表示0到255的整数.目前,对于多有的实时图像应用而言,虽然有其他的表示形式,但一个像素通常由每个通道的一个字节表示. 一个OpenCV图像是.a ...
- 爱心 python 词云_爱心 python 词云_python 词云
最近由于大屏项目需要生成一个词云所以这边做个记录 demo.py下: from os import path import chnSegment import plotWordcloud if __n ...
- python中xlwt的局限,Python xlwt 生成Excel和设置特定单元格不可编辑
请看我另一篇生成Excel的文章(推荐) xlwt 这是一个供开发人员用来生成与Microsoft Excel 95到2003版兼容的电子表格文件的库. 包本身是纯Python,不依赖于标准Pytho ...
- python自动化办公百度云_用Python自动办公 做职场高手全16讲 完整版 视频教程
python这门编程最近可是非常火,不是俗谚有说"人生苦短,我用python".这是有道理的,一是它相对于其他语言,更简单易上手,二是功能可大,可以爬虫,可以写工具. 这里分享给大 ...
- python操作三大数据库百度云_【python操作三大】下载 - 面包树
|- 第一章 Python介绍.small[更多IT资源 www.cong0sousuo.top].mp4 - 88.10 MB |- 第五章第6节-字符集与bytes类型_1.small[更多IT资 ...
- python cookbook 中文百度云_《Python+Cookbook》第三版中文v3.0.0PDF高清完整版免费下载|百度云盘...
David Beazley是一位居住在芝加哥的独立软件开发者以及图书作者.他主要的工作在于编程工具,提供定制化的软件开发服务,以及为软件开发者.科学家和工程师教授编程实践课程.他最为人熟知的工作在于P ...
- 父与子python 百度云_《父与子的编程之旅:与小卡特一起学Python第2版》pdf电子书百度网盘下载地址...
内容简介: 本书是一本家长与孩子共同学习编程的入门书.作者是一对父子,他们以Python语言为例,详尽细致地介绍了Python如何安装.字符串和操作符等程序设计的基本概念,介绍了条件语句.函数.模块等 ...
- python 百度词典_用 Python 3 写的命令行百度词典
今天用Python 3 写了一个 百度词典.真的很小巧,呵呵,很好的语言. # -*- coding: utf8 -*- import urllib.parse import urllib.reque ...
最新文章
- mkdir命令使用详解
- ASP.NET Web 页面生命中的一天
- 把一个项目放到GItHub上
- MySQL COUNT函数优化及count(1)/count(*)/count(列名)的区别
- Oracle学习:视图与索引
- boost::king_ordering用法的测试程序
- navcat定时备份mysql_Linux实现MYSQl数据库的定时备份
- 微信小程序实现datamatrix(dm)码
- SmartDrv的前世今生——PrimoCache_2.2.0汉化
- 推荐7个深耕多年的公众号
- python全案例学习_Python全案例学习与实践
- Python 网络数据采集(三):采集整个网站
- 操作系统,计算机网络,数据库刷题笔记11
- 期货交易中的重仓操作
- Java实现子序列问题
- [flex]flex-direction: column;
- 逐步释放质疑怎么样释放std::vector所占用的内存空间
- btcd交易流程之交易的创建(一)
- 解决 Cocos2d-x 3.2 error C1041: 无法打开程序数据库vc120.pdb
- redis中的multi和pipeline