当前位置:网站首页 > Python编程 > 正文

python函数代码大全(python函数csdn)



数据中级处理代码Pandas数据去重numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)* uv_daily = data.groupby('date')['user_id']
.apply(lambda s:s.drop_duplicates().count())
.rename('uv').reset_index()

* uv_daily = data.groupby('date')['user_id']
.nunique().rename('uv').reset_index()


'''
数据中含有重复值时,使用下列方法处理。
s.duplicated(), s.drop_duplicates()
'''
#重复值观察
date1_2_duplicate=date1_2.duplicated('发票号码').sum()
date1_3_duplicate=date1_3.duplicated('发票号码').sum()
#删除重复值 会影响索引
date1_2_duplicate_drop=date1_2.drop_duplicates('发票号码')
date1_3_duplicate_drop=date1_3.drop_duplicates('发票号码')

s = pd.Series(list('abacdefanla'))

b = s.duplicated() # 检测重复值,返回布尔数组,重复值处显示True

s1 = s.drop_duplicates() # 删除重复值,返回 一个新对象



df = pd.DataFrame({'c1': ['a', 'a', 'b'], 'c2': ['a', 'b', 'b'], 'c3': ['a', 'b', 'x']})

b1 = df.duplicated() # 整行检测, 英标[ˈduːplɪkeɪtɪd]


b2 = df.duplicated('c1') # 整列检测

df2 = df.drop_duplicates('c1') # c1列上删除重复值
 数据异常值3-Sigma规则
for col in data.select_dtypes(include=[np.number]).columns:
mean = data[col].mean()
std = data[col].std()
upper_limit = mean + 3 * std
lower_limit = mean - 3 * std

# 找出异常值的索引并替换
data.loc[data[col] > upper_limit, col] = data[col].median()
data.loc[data[col] < lower_limit, col] = data[col].median()
箱型图(IQR)方法
for col in data.select_dtypes(include=[np.number]).columns:
Q1 = data[col].quantile(0.25)
Q3 = data[col].quantile(0.75)
IQR = Q3 - Q1
lower_limit = Q1 - 1.5 * IQR
upper_limit = Q3 + 1.5 * IQR

# 找出异常值的索引并替换
data.loc[data[col] > upper_limit, col] = data[col].median()
data.loc[data[col] < lower_limit, col] = data[col].median()#使用value counts()函数查石df1中"省份”的分布情况以以及查石表格台份这print(df1.['省份].value counts0)
#使用replace0函数进行替换df1数据中拼写错误的值,并值给原数据

df1[省份]= df1[省份].replace(浙省,浙江省)

#使用print0函数输出进行替换之后的df1中"省份”的数据
print(df1[省份])

#使用value counts0函数查看df1中"省份”的分布情况以及检查是否修改成功,并使用print0函数进行 输出

print(df1[’省份’].value_counts())
 数据无量纲化(归一化)from sklearn.preprocessing import MinMaxScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
import pandas as pd
pd.DataFrame(data)
#实现归一化
scaler = MinMaxScaler() #实例化
scaler = scaler.fit(data) #fit,在这里本质是生成min(x)和max(x)
result = scaler.transform(data)
result_ = scaler.fit_transform(data)
scaler.inverse_transform(result) #将归一化后的结果逆转

#当X中的特征数量非常多的时候,fit会报错并表示,数据量太大了我 计算不了
#此时使用partial_fit作为训练接口
#scaler = scaler.partial_fit(data)

别的
import numpy as np
X = np.array([[-1, 2], [-0.5, 6], [0, 10], [1, 18]])
#归一化
X_nor = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_nor
#逆转归一化
X_returned = X_nor * (X.max(axis=0) - X.min(axis=0)) + X.min(axis=0)
X_returned

数据无量纲化:数据标准化

当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分 布)

from sklearn.preprocessing import StandardScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = StandardScaler() #实例化
scaler.fit(data) #fit,本质是生成均值和方差
x_std = scaler.transform(data) #通过接口导出结果
result=scaler.fit_transform(data)
 数据缺失值处理
 import pandas as pd
data = pd.read_csv(r"C:worklearnbettermicro-classweek 3
PreprocessingNarrativedata.csv",index_col=0)
data.head()

data.loc[:,"Age"] = data.loc[:,"Age"].fillna(data.loc[:,"Age"].median())
#.fillna 在DataFrame里面直接进行填补
data.dropna(axis=0,inplace=True)
#.dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列
#参数inplace,为True表示在原数据集上进行修改,为False表示生成一个复制对象,不修改原数据,默认False




# 1) nan缺失值处理(决策树填充)
a = np.array([1, 5, np.nan, np.nan, 10])
a.sum()
a.mean()

s = pd.Series(a)#变成series后可忽略nan进行处理
s.sum()
s.mean()

b1 = s.isnull()
b2 = s.notnull()


b1 = s.isnull().sum()#计算缺失值个数


df = pd.DataFrame(np.arange(12).reshape(4, 3), index=list('abcd'),columns= list('xyz'))
df.iloc[1:3, 0:2] = np.nan
df.iloc[2, 2] = np.nan

a1 = df.dropna()

a2 = df.dropna(axis = 1)

a3 = df.dropna(how='all') # 表示某行的所有数据都为nan才删除

a4 = df.dropna(thresh = 2) # 保留非nan值个数>=2的数据行/列

a41 = df.dropna(thresh = 1) # 保留非nan值个数>=1的数据行/列

df.fillna(0)#填充是按列来填充的

df.fillna(method = 'ffill')#用前一个值填充

df.fillna(method = 'bfill')#用下一个值填充

df.fillna(value = df.mean())#用平均值填充

一些例子
hh=data_touzi_all#放表名

all_1=hh.groupby(['基金代码_FdCd']).mean().reset_index()
all_1

#空白值观察
print('数据表 初始数据信息')
print(all_1.info())
print("初步空白值: {}".format(all_1.isnull().sum()))

#缺失值处理

# 计算每列的缺失值比例
aa=all_1#存放数据
missing_percentages = aa.isnull().mean()

# 找到缺失值比例大于60%的列
missing_above_60 = missing_percentages[missing_percentages > 0.6]

# 删除缺失值比例大于60%的列
df = aa.drop(missing_above_60.index, axis=1)

df=df.iloc[:,[0,6,8,9,10]]
#删除空白值模块 按最高向下去掉空白值

missing_percentage = df.isnull().sum() / len(df) * 100

# 按照缺失值比例升序排序
missing_percentage_sorted = missing_percentage.sort_values(ascending=True)
print(missing_percentage_sorted)
# 删除缺失值最高的列,直到所有行都没有缺失值或者无法再删除
while True:
# 找到第一个缺失值比例最高的列
col_to_drop = missing_percentage_sorted.index[-1]
print(col_to_drop)
# 如果该列存在缺失值,删除该行
if df[col_to_drop].isnull().sum() > 0:
df.dropna(subset=[col_to_drop], inplace=True)
# 重新计算每列缺失值比例
missing_percentage = df.isnull().sum() / len(df) * 100
# 按照缺失值比例升序排序
missing_percentage_sorted = missing_percentage.sort_values(ascending=True)
# 如果所有行都没有缺失值或者无法再删除,则退出循环
if missing_percentage_sorted.iloc[-1] == 0 or len(missing_percentage_sorted) == 0:
break
print('删除空白值后')
df.isnull().sum()

x0_all=df


 数据编码
(数据分箱)为了让数据适 应 算法和库,我们必须将数据进行编码,即是说,将文字型数据转换为数值型

preprocessing.LabelEncoder:标签专用,能够将分类转换为分类数值

from sklearn.preprocessing import LabelEncoder
data.iloc[:,-1] = LabelEncoder().fit_transform(data.iloc[:,-1])
preprocessing.OrdinalEncoder:特征专用,能够将分类特征转换为分类数值


from sklearn.preprocessing import OrdinalEncoder
data_.iloc[:,1:-1] = OrdinalEncoder().fit_transform(data_.iloc[:,1:-1])

 # 8.5.6 数据分段
'''
数据分段是将数据按指定的区间归类,以统计每个区间的数据个数。
例如将成绩分为优、良、中、不及格区间段。
数据分段的方法是pd.cut(),分段前要自定义数据区间段,并设置对应的标识文字。
'''

np.random.seed(7)
score = np.random.randint(30, 100, size=100) # 生成100个随机整数

bins = [0, 59, 70, 85, 100] # 定义区间段
labels = ['不及格', '中', '良', '优'] # 设置各段的标识文字
scut = pd.cut(score, bins, labels=labels) # 将score按bins分段
s = pd.value_counts(scut) # 统计各类别的数据个数
 多维数组转一维数组.ravel()数组排序b=np.random.randint(1, 20, size=10)
c=b.copy() # 备份

b=np.sort(b)#从小到大排序
#数组排序不支持列表的reverse=True参数,要从大到小排如下所示:
b_reverse=b[np.argsort(-b)] # 注意 -b

#多维数组排序时可指定 axis=0(行) / 1(列),排序时默认按最大轴排序

np.random.seed(7)
b=np.random.randint(1, 50, size=15).reshape(3, 5)
np.sort(b) #默认按axis=1 ,在水平方向上排序
np.sort(b, axis=0) # 在竖直方向上排序# 8.5.4 排序和排名
# a)排序
* top10_Good = item_type_df
.sort_values(by=4, ascending=False)[:10]

s = pd.Series([2, 5, 1], index=['d', 'a', 'b'])

ser1 = s.sort_index() # 按索引'a b d'排序,返回新对象,并不改变原对象

ser2 = s.sort_values() # 按数据值1 2 5排序

ser3 = s.sort_index(ascending=False) # 按索引逆序排


np.random.seed(7)
arr = np.array(np.random.randint(1, 100, size=9)).reshape(3, 3)
df = pd.DataFrame(arr.reshape(3, 3), columns=['x','z','y'], index=['a','c','b'])

df.sort_index()

df.sort_index(axis=1)

df.sort_index(axis=1, ascending = False) # 按列名索引降序z y x排列


df.sort_values(by='y') # 按y列的数值排序

df.sort_values(by=['y', 'z']) # 先参照y列,再z列排序

df.sort_values(by='b', axis = 1) # 按b列的数值排序

# b) 排名
s = pd.Series([3, 5, 8, 5], index=list('abcd'))

l = s.rank() # 排名,默认按数据值升序排名

l = s.rank(ascending=False) # 降序

l = s.rank(method='first') # 指定名次号的生成方法为first
 分组统计#-----> 8.6 分组统计

# 8.6.1 分组对象概述
'''
Pandas支持数据分组,功能类似数据库中的group by(分组统计)
'''

df = pd.DataFrame({'color': ['red', 'white', 'black', 'red', 'black', 'red'], 'size':['s','m','b','s','m','b'], 'price': [10, 11, 12, 20, 21, 22], 'quantity': [1, 2, 3, 3, 4, 5]})

g = df.groupby('color') # 按color分组


for x in g:
print(x)

for name, group in g:
print(name) # 输出组名
print(group) # 组内容

# 8.6.2 分组对象的统计方法
a1 = g.size() # 列出每个分组的数据条数
a2 = g.sum() # sum只对数值列求和,非数值列未显示
a3 = g.get_group('black') # 指定返回black组数据
a4 = g.head(2) # 取每个分组的头2个数据
a5 = g.nth(0) # 取每组的第0个数据
a6 = g.price.describe() # 对price列做describe,得到一组常用统计量


'''
分组对象有一个aggregate合计方法(简写为agg),它允许传递多个统计函数,
因此可以一次性得到多个统计值。
'''

g.quantity.agg((np.sum, np.mean, np.max, np.min))
g.quantity.agg([('均值','mean'), ('最大值','max')]) # 定义列名

#自定义函数聚合
df = pd.DataFrame({'color': ['red', 'white', 'black', 'red',
'black', 'red'], 'size':['s','m','b','s','m','b'],
'price': [10, 11, 12, 20, 21, 22], 'quantity':
[1, 2, 3, 3, 4, 5]})

g = df.groupby('color') # 按color分组

def squre_sum (x):
s = 0
for i in x.values:
s = s + i2
return s

g.quantity.agg(squre_sum)

例子
groupby([列名1,列名2])['列名'].count()#聚合函数count()

groupby('列名A').sum()#聚合函数sum()

data.groupby('州')['州'].count().rename('哈哈').reset_index()

*重置索引
p1=p1.reset_index(drop=True)


 时间序列#-----> 8.7 时间序列
'''
Pandas最初研发的目的是作为金融数据分析包,因此提供了丰富的时间序列处理方法。
时间序列做索引,运算时会自动按日期对齐。
'''

# 8.7.1 Pandas中的时间函数
'''
拿到timestamp的年月日:

date1['年的日期']=date1['开票日期'].dt.year
date2['年的日期']=date2['开票日期'].dt.year

date1['月期']=date1['开票日期'].dt.month
date2['月期']=date2['开票日期'].dt.month
a) to_datetime(): 将 字符串转换为时间,识别不同格式的日期字符串。
'''

pd.to_datetime('2022-11-28')

pd.to_datetime(['28/11/2022', '2022.11.28'])

pd.to_datetime('2022-11-28 15:30:00')

today = pd.datetime.now()

t2 = today + pd.DateOffset(days=3)


'''
b) date_range():用于产生指定日期段内的一系列日期时间值。
pd.date_range(起始日期, 结束日期, periods=周期数, freq=日期频率)
'''

dt1 = pd.date_range('2019-02-01', '2019-02-28')
# 默认频率1天
dt2 = pd.date_range('2019-02-01', '2019-02-28', freq='3D'
) # 频率为每3天
dt3 = pd.date_range('2019-01-01', periods=6, freq='3D')
# 每3天1个日期


'''
有时需要对日期序列做shift( 移动)转换,以计算相邻日期间的数据变动。
'''

np.random.seed(7)
dates = pd.date_range('2018-9-1', periods=4) # 生成4个日期索引值
s = pd.Series(np.random.rand(4), index=dates)

s1 = s.shift(1) # 后移一个数据位

diff = s - s.shift(1)

# ((s - s.shift(1)) / s.shift(1)).map(lambda x: format(x, '.2%'))
# 变动百分比并格式化


# 8.7.2 时间频率变换
'''
用时间作为索引时,可以方便地按时间段查看数据。
对时间序列数据可用resample()方法按不同频率进行重采样,然后对样本进行计算。
'''
np.random.seed(7)
dates = pd.date_range('2018-1-1', periods=365)
s = pd.Series(np.random.randn(365), index=dates) # 2018年模拟数据

data1 = s['2018-1'] # 选取2018年1月的数据
data2 = s['2018-02' : '2018-04'] # 选取2018年2月至4月的数据
data3 = s.resample("1M").mean() # 按月求均值
data4 = s.resample("10D").sum() # 每10天求和

data5 = s.resample("10D").agg([np.max, np.min]) # 每10天一次采样,返回每组样本的最大值、最小值
 多级索引# 8.5.7 多级索引

'''
Pandas支持一级索引,也支持多级索引(MultiIndex)。
多级索引可以更好地表达数据之间的联系。
'''
data = np.arange(2, 10).reshape(4, 2)
df1 = pd.DataFrame(data, index=[list('AABB'), list('rgrg')], columns=['一月','二月'])

mindex = pd.Index([('A', 'r'), ('A', 'g'), ('B', 'r'), ('B', 'g')], names=["Product", "Color"])
df2 = pd.DataFrame(data, index = mindex, columns=['一月','二月'])

df1.loc['B'] # 查看B类产品

df2.loc[('B', 'r')] # 查看B类中的红色r产品

df2.loc[(slice(None), 'r'), :] # 查看所有的红色r产品

df2.loc['A'].sum() # A 类每个月数量和

df2.loc['A'].sum().sum() # 所有A类数量和

df2.loc[(slice(None), 'r'), :].sum().sum() # r类数量和

df2.groupby(level='Product').sum()

df2.groupby(level='Product').sum().sum(axis=1)


df2=df1.unstack() # 默认将内层的1级行索引转为列索引

df3=df1.stack() # 变为三级(0,1,2)索引了

df3.groupby(level=2).sum()到此这篇python函数代码大全(python函数csdn)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • py文件用什么软件打开免费(python文件用什么软件打开)2025-01-28 14:27:08
  • onnx模型部署 python(onnx模型部署arm板)2025-01-28 14:27:08
  • CNN神经网络降噪(python神经网络音频降噪处理)2025-01-28 14:27:08
  • python3.8新建py文件(用python新建文件)2025-01-28 14:27:08
  • py文件打包成exe文件(python3.8打包成exe文件)2025-01-28 14:27:08
  • python服务部署(py部署到服务器)2025-01-28 14:27:08
  • pivot函数 python报错out of bound(python中pivot()函数的用处)2025-01-28 14:27:08
  • 凯撒密码加密算法python作业(凯撒密码python123)2025-01-28 14:27:08
  • python将py文件编译成exe文件(python如何编译成exe)2025-01-28 14:27:08
  • python函数返回多个参数(python3返回多个值)2025-01-28 14:27:08
  • 全屏图片