wp231957 发表于 2019-6-1 15:23:24

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 18:54:02

本帖最后由 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 22:19:32

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-9 21:26:14

本帖最后由 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 列不对齐的现象

wp231957 发表于 2020-3-10 13:43:50

本次更新:获取某列最大值及该列最大值所在的行索引

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(),"平均销售"])

wp231957 发表于 2020-3-12 19:46:20

本次更新:关于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所在的行 索引(名称)

wp231957 发表于 2022-7-20 09:47:49

>>> 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]
查看完整版本: pandas 得点点滴滴