大家好,我是陈诚~今天分享一下pandas常用的8个索引设置1.常用于将索引从groupby操作转换为列groupby分组方式。比如下面的分组就是通过添加分组列team来进行的。>>>df0["team"]=["x","x","y","y","y"]>>>DF0abcteam00.5480120.2885830.734276x10.3428950.995485x20.37879130.9719513Y30.039738126.008Y4??0.581093??0.750331??0.133022????Y>>>?df0.groupby("team").mean()?????????????A?????????B?????????Cteam??????????????????????????????X?????0.445453??0.248250??0.864881Y?????0.333208??0.306553??0.443828默认情况下,分组会将分组列编程index索引。Butinmanycases,we不希望分组列成为索引,因为一些计算或者判断逻辑可能还是需要用到这一列。因此,我们需要进行设置,让分组列不成为索引,同时又能完成分组功能。有两种方法可以完成你想要的,第一种是使用reset_index,第二种是在groupby方法中设置as_index=False。个人更喜欢第二种方法,只需要两步,更简洁。>>>df0.groupby(“团队”)。意思是()。reset_index()团队ABC0x0.4454530.2482500.8648811y0.3332080.3332080.3065530.3065530.443828>>>df0.groupby(“ass_index”aas_index=fallaaaaabbbbc0x0.44444530.24530.248333333333333333333333333333333333333333334333433334411IND30.8364411IND30336434411IND303364343112我们已经读取数据或完成一些手动处理步骤>>>df=pd.read_csv("data.csv",PARSE_DATES=["date"]]>>>df.set_index("date")tempeaturehumidityDate2021-07-0195502021-07-07552021--07-039456这里有两点需要注意,set_index方法默认会创建一个新的DataFrame,如果想原地改变df的index,需要setinplace=True.df.set_index(“date”,inplace=True)如果要保留将要设置为索引的列,可以setdrop=False.df.set_index(“date”,drop=False)3.Resetindexaftersomeoperations在处理DataFrame时,一些操作(如删除行、索引选择等)会生成原始索引的子集,所以默认第i个索引排序搞砸了。要重新生成连续索引,可以使用reset_index方法。>>>?df0?=?pd.DataFrame(np.random.rand(5,?3),?columns=list("ABC"))>>>?df0??????????A?????????B?????????C0??0.548012??0.288583??0.7342761??0.342895??0.207917??0.9954852??0.378794??0.160913??0.9719513??0.039738??0.008414??0.2265104??0.581093??0.7503310.133022>>>DF1=DF0[DF0.Index%2==0]>>>DF1ABC00.5480120.2885830.73427620.3787940.160940.1609130.97195140.5810930.5810930.75033331333313331>0.13331aex2222222222222222222222222222222222222222222222222222年0.3787940.1609130.97195120.5810930.7503310.133022通常我们不需要保留旧的索引,所以我们可以将drop参数设置为True。另外,如果想原地重置索引,可以将inplace参数设置为True,否则会创建一个新的DataFrame。4.排序后重新设置索引这个问题在使用sort_value排序方式时也会遇到,因为默认情况下,索引索引随着排序顺序的变化而变化,所以乱雪。如果我们希望索引不随排序而改变,我们还需要在sort_values方法中设置参数ignore_index。>>>?df0.sort_values("A")??????????A?????????B?????????C?team3??0.039738??0.008414??0.226510????Y1??0.342895??0.207917??0.995485????X2??0.378794??0.160913??0.971951????Y0??0.548012??0.288583??0.734276????X4??0.581093??0.750331??0.133022????Y>>>?df0.sort_values("A",?ignore_index=True)A?????????B?????????C?team0??0.039738??0.008414??0.226510????Y1??0.342895??0.207917??0.995485????X2??0.378794??0.160913??0.971951????Y3??0.548012??0.288583??0.734276????X4??0.581093??0.750331??0.133022????Y5.删除重复后重置索引删除重复项和排序一样,默认执行后也会打乱排序顺序。Similarly,youcansettheignore_indexparameterTrueinthedrop_duplicatesmethod.>>>?df0??????????A?????????B?????????C?team0??0.548012??0.288583??0.734276????X1??0.342895??0.207917??0.995485????X2??0.378794??0.160913??0.971951????Y3??0.039738??0.008414??0.226510????Y4??0.581093??0.750331??0.133022????Y>>>?df0.drop_duplicates("team",?ignore_index=True)??????????A?????????B?????????C?team0??0.548012??0.288583??0.734276X10.3787940.1609130.971951Y6。直接分配索引当我们有一个DataFrame时,我们希望使用不同的数据源或单独的操作来分配索引。在这种情况下,索引可以直接分配给现有的df.index。>>>better_index=[“x1”,“x2”,“y1”,“y2”,“y3”]>>>df0.index=better_index>>>df0abcteamx10.5480120.2885830.7342760.3787940.1609130.971951YY20.0397380.0084140.226510YY30.5810930.7503310.133022Y7。写入CSV文件时忽略索引数据。如果我们不想在导出的CSV文件中包含它,我们可以在to_csv方法中设置index参数。>>>df0.to_csv("exported_file.csv",index=False)如下图,在导出的CSV文件中,索引列没有包含在文件中。其实很多方法都有索引的设置,但是人们一般关心的是数据,往往会忽略索引,这样在继续运行的时候可能会出错。以上高频操作都有指标设置。建议大家在平时使用的时候养成设置索引的习惯,这样可以节省很多时间。8、读取时指定索引列很多情况下,我们的数据源是CSV文件。假设有一个名为data.csv的文件,其中包含以下数据。date,temperature,humidity07/01/21,95,5007/02/21,94,5507/03/21,94,56pandas默认会创建一个从0开始的索引行,如下:>>>pd.read_csv("data.csv",PARSE_DATES=["Date"])DateTemperatureHumidity02021-07-01955012021-075522021-07-039456.然而,我们可以,我们可以,我们可以,我们我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以,我们可以wecan,wecan,wecan,wecan,wecan,wecan,wecan在引入过程中,可以通过给一个列设置index_col参数直接指定索引列。>>>PD.READ_CSV("Data.csv",PARSE_DATES=["Date"],Index_Col="Date")TemperatureHumidityDate2021-07-0195502021-07-0294552021-07-039456后来的朋友可以点赞关注哦~谢谢支持!
