700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python 用pandas处理csv dataframe groupby等

Python 用pandas处理csv dataframe groupby等

时间:2022-11-16 09:14:49

相关推荐

Python 用pandas处理csv dataframe groupby等

这两天用Python写了个小程序,原理实现部分不难,但是对python语言不熟,过程遇到挺多困难的。而且最后发现评估原则有些没用实现到的。考虑到时间宝贵,就以后再做吧。

代码就不贴了,把一些问题解决方案记录一下:

1.读取csv。注意编码,header指定了表头位置,如果前几行是空行是不用算进来的。比如我的表里表头在第7行,但其实表头前面只有2行是有内容的。

import pandas as pddf=pd.read_csv(file_name,encoding='utf-8',header=2)

这样读出来的类型可能都是object,不利于后续比较计算,可以采用以下方法:

frame[CMAX]=frame[CMAX].astype(int)frame[WUR]=frame[WUR].astype(float)print(frame.dtypes)#检查frame每列的类型

2.根据列名新建一个行数更少的dataframe。

frame=DataFrame(df,columns=[CellName,ENB,CMAX,WUR])

3.删除/选取某行含有特定数值的列。

rows=[x for i,x in enumerate(frame.index) if frame.iat[i,3]=='NIL' or pd.isnull(frame.iat[i,3])]#利用enumerate对frame进行遍历,将无线利用率为'NIL'或为空的列放入rows中frame=frame.drop(rows,axis=0) #利用drop方法将含有特定数值的行删除

4.使用groupby聚合CMAX列最大最小值、WUR列最大最小值。

ResultA=frame.groupby([ENB]).agg({CMAX:['max','min'],WUR:['max','min']})

5.增加列。初始化整列都赋同个值。

ResultA['physicCell']='1'ResultA['freqsameCell']=0

6.获取dataframe的大小。

ResultA.shape#行和列(1200,4)ResultA.shape[0]#行1200ResultA.shape[0]#列4

7.基础操作:数据选取loc、iloc、ix函数

loc函数主要通过行标签索引行数据,划重点,标签!标签!标签!

ResultA.loc[index,'freqsameCell']=1

如果用loc['a']意味着行标签是'a',选取这一行,不能是列标签。

df.loc[df['age']>30,['name','age']]#可以同时对行列进行筛选

iloc 主要是通过行号获取行数据,划重点,序号!序号!序号!

iloc[0:1],由于Python默认是前闭后开,所以,这个选择的只有第一行!

ix——结合前两种的混合索引,即可以是行序号,也可以是行标签。

at:选列是只能是列名,不能是position,获取某个数值的具体位置。

iat:通过标签获取某个数值的具体位置。

df[]只能进行行选择,或列选择,不能同时进行列选择,列选择只能是列名。

8.用iterrows遍历dataframe中的行列标签。

for index,row in ResultA.iterrows():Smax=int(row[(CMAX,'max')])Smin=int(row[(CMAX,'min')])Wmax=float(row[(WUR,'max')])Wmin = float(row[(WUR, 'min')])if Smax>=150 and Smin<250:ResultA.loc[index,'freqsameCell']=1countA=countA+1#print(index)elif Smax>=150 and Smin<250 and tmp>=1.5 and tmp<2 and Wmax>80 and Wmin<50 and Wmax-Wmin>=30:tmp = Smax / SminResultA.loc[index,'freqsameCell']=1countA=countA+1

9.保存csv。如果encoding是utf-8可用.to_csv(filename,encoding='utf-8_sig')方法:

ResultB.loc[ResultB['freqdifferCell']==1].to_csv('频间不均衡扇区.csv', encoding='utf-8_sig')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。