pandas 得点点滴滴
本帖最后由 wp231957 于 2024-7-31 09:18 编辑pandas 之二请点击这里
pandas 之三请点击这里
import pandas as pd
>>> df =pd.DataFrame({"a" : ["23456666abcded1","abadsd1585s5fd2","24safsa5da3","sfasd4d4sfsa4"]})可创建dataframe
>>> df
a
023456666abcded1
1abadsd1585s5fd2
2 24safsa5da3
3 sfasd4d4sfsa4
>>> pd.DataFrame(df,columns=["a","b"])增加新列
a b
023456666abcded1 NaN 默认值nan
1abadsd1585s5fd2 NaN
2 24safsa5da3 NaN
3 sfasd4d4sfsa4 NaN
>>>
>>> b=df["a"].str可切片,不过这样不行
>>> df
a
023456666abcded1
1abadsd1585s5fd2
2 24safsa5da3
3 sfasd4d4sfsa4
>>> pd.DataFrame(df,columns=["a","b"])
a b
023456666abcded1 NaN
1abadsd1585s5fd2 NaN
2 24safsa5da3 NaN
3 sfasd4d4sfsa4 NaN
>>> df["b"]=df["a"].str 这样切片 并为新列赋值
>>> df
a b
023456666abcded1345
1abadsd1585s5fd2 bad
2 24safsa5da3 4sa
3 sfasd4d4sfsa4 fas
>>> pd.DataFrame(df,columns=["a","b","c"])
a b c
023456666abcded1345NaN
1abadsd1585s5fd2 badNaN
2 24safsa5da3 4sa NaN
3 sfasd4d4sfsa4 fas NaN
>>> df["c"]=df["a"].str[:-1] 这个切错了
>>> df
a b c
023456666abcded134523456666abcded
1abadsd1585s5fd2badabadsd1585s5fd
2 24safsa5da34sa 24safsa5da
3 sfasd4d4sfsa4fas sfasd4d4sfsa
>>> df["c"]=df["a"].str[-1:] 切最后一位数字
>>> df
a bc
023456666abcded13451
1abadsd1585s5fd2bad2
2 24safsa5da34sa3
3 sfasd4d4sfsa4fas4
>>> df["c"]=(df["a"].str[-1:])*15 这个*15是字符串重复15次
>>> df
a b c
023456666abcded1345 111111111111111
1abadsd1585s5fd2 bad 222222222222222
2 24safsa5da3 4sa 333333333333333
3 sfasd4d4sfsa4 fas 444444444444444
>>> df["c"]=(int(df["a"].str[-1:]))*15 pandas 不支持int一类的强制转换
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python3\lib\site-packages\pandas\core\series.py", line 93, in wrapper
"{0}".format(str(converter)))
TypeError: cannot convert the series to <class 'int'>
>>> df["c"]=((df["a"].str[-1:].astype("int")))*15 需要使用astype
>>> df
a b c
023456666abcded134515
1abadsd1585s5fd2bad 30
2 24safsa5da3 4sa 45
3 sfasd4d4sfsa4 fas 60
>>> 本帖最后由 wp231957 于 2019-7-12 19:10 编辑
>>> import pandas as pd
>>> df=pd.read_csv("test.csv",encoding="gbk")
>>> df
姓名语文 数学
0小a90 94
1小b91 95
2小c95 99
3小c96100
4小a93 91
5小b92 96
6小c95 94
>>> groupsum = df.groupby('姓名').sum()
>>> groupsum
语文 数学
姓名
小a183185
小b183191
小c286293
>>> pj=pd.DataFrame(groupsum,columns=["语文","数学","考试次数","语文平均分","数学平均分"])
>>> pj
语文 数学考试次数语文平均分数学平均分
姓名
小a183185 NaN NaN NaN
小b183191 NaN NaN NaN
小c286293 NaN NaN NaN
>>> pj["考试次数"]=df.groupby('姓名').size()
>>> pj
语文 数学考试次数语文平均分数学平均分
姓名
小a183185 2 NaN NaN
小b183191 2 NaN NaN
小c286293 3 NaN NaN
>>> pj["语文平均分"]=pj["语文"].astype("int")/pj["考试次数"].astype("int")
>>> pj["数学平均分"]=pj["数学"].astype("int")/pj["考试次数"].astype("int")
>>> pj
语文 数学考试次数 语文平均分 数学平均分
姓名
小a183185 291.50000092.500000
小b183191 291.50000095.500000
小c286293 395.33333397.666667
>>> wp231957 发表于 2019-7-12 18:54
>>> import pandas as pd
>>> df=pd.read_csv("test.csv",encoding="gbk")
>>> df
import pandas as pd#如果没有安装 请pip install pandas 或者百度之
df=pd.read_csv("test.csv",encoding="gbk")
groupsum = df.groupby('姓名').sum()
pj=pd.DataFrame(groupsum,columns=["语文","数学","考试次数","语文平均分","数学平均分"])
pj["考试次数"]=df.groupby('姓名').size()
pj["语文平均分"]=pj["语文"].astype("int")/pj["考试次数"].astype("int")
pj["数学平均分"]=pj["数学"].astype("int")/pj["考试次数"].astype("int")
#pj["语文平均分"].round(decimals=2)
#pj["数学平均分"].round(decimals=2)
pj.to_csv("out.csv",float_format = '%.2f')#pj.to_csv("out.csv",header=0) 不保留列名
print("文件处理完毕")
这里包含保存文件时小数位数不固定的解决办法 本帖最后由 wp231957 于 2020-3-10 13:44 编辑
本次更新:以html格式导出数据
import pandas as pd
df = pd.DataFrame({
'10月份销售' : ['0.477468', '0.195046', '0.015964', '0.259654', '0.856412', '0.259644'],
'9月份销售' : ['0.347705', '0.151220', '0.895599', '0236547', '0.569841', '0.254784']
})
pj=pd.DataFrame(df,columns=["10月份销售","9月份销售","平均销售"])
pj["平均销售"]=(pj["10月份销售"].astype("float")+pj["9月份销售"].astype("float"))/2
print(pj.to_html())
#使用:E:\wp>python tt2.py >a.html
#查看自然是在浏览器里查看会看到X*Y的html表格
网上资料说是:jupyter notebook里不存在print 列不对齐的现象 本次更新:获取某列最大值及该列最大值所在的行索引
import pandas as pd
df = pd.DataFrame({
'10月份销售' : ['0.477468', '0.195046', '0.015964', '0.259654', '0.856412', '0.259644'],
'9月份销售' : ['0.347705', '0.151220', '0.895599', '0236547', '0.569841', '0.254784']
})
pj=pd.DataFrame(df,columns=["10月份销售","9月份销售","平均销售"])
pj["平均销售"]=(pj["10月份销售"].astype("float")+pj["9月份销售"].astype("float"))/2
sortpj=pj.sort_values(by='平均销售')
print("原始数据是:\n",df)
print("========================")
print("添加了平均值后数据是:\n",pj)
print("平均销售最大值所在的行索引为:",pj["平均销售"].idxmax())
print("平均销售最大值为:",pj.loc.idxmax(),"平均销售"]) 本次更新:关于NAN的一些知识点
import numpy as np
import pandas as pd
from numpy import nan as NA
x=pd.DataFrame(np.arange(15).reshape(5,3), index=list('defgh'), columns=list('abc'))
x.loc['e']=None
x.loc['f','b']=None
print(x)
print(x.isnull()) #返回所有NAN返回值是一个用True False填充的矩阵
print(x.isnull().all(axis=0))#判断某列是否全NAN
print(x.isnull().all(axis=1))#判断某行是否是全NAN
print(x.isnull().any(axis=0))#返回某列是否具备NAN
print(x.isnull().any(axis=1))#返回某行是否具备NAN
print(np.where(np.isnan(x))) #(array(, dtype=int32), array(, dtype=int32))返回NAN的行列坐标
print(x.index] ) #Index(['e', 'e', 'e', 'f'], dtype='object')返回NAN所在的行 索引(名称) >>> df
xmscore
0a 100
1b 150
2c 200
3d 80
4a 20
5a 57
6b 66
>>> df.groupby(["xm"]).agg({"sum","count"})
score
sum count
xm
a 177 3
b 216 2
c 200 1
d 80 1
>>>
页:
[1]