Python数据处理:筛选、统计、连表、拼接、拆分、缺失值处理

Python027

Python数据处理:筛选、统计、连表、拼接、拆分、缺失值处理,第1张

file1_path ='E:/Users/lenovo/Desktop/中视/622召回.csv' # 源数据

格式:file1=pd.read_csv(file1_path)

pd.read_csv(file1_path,encoding='gbk')

pd.read_csv(file1_path,encoding='gbk',skiprows=[2,3])

pd.read_csv(file1_path,encoding='gbk',skiprows=lambda x:x%2==1)

pd.read_csv(file1_path,encoding='gbk',keep_default_na=False)

new=pd.DataFrame()

new.new[[0,1,2]]

new.new[0:2]

查询结果同上

new.loc[new['激活数']>1000]

loc和iloc的区别:

     loc:纯标签筛选

     iloc:纯数字筛选

#筛选出new的某两列

new=new.loc[:,['phone','收件人姓名']]

#筛选new的第0,1列

new.iloc[:,[0,1]]

使用‘==’筛选-筛查“崔旭”的人(只能筛查指定明确的)

#new=file1.loc[(file1['收件人姓名']=='崔旭')|(file1['收件人姓名']=='崔霞')]

#print(new)

#使用loc函数筛选-str.contains函数-筛查名字中包含'亮'和'海'的人

#new=file1.loc[file1['收件人姓名'].str.contains('亮|海')]

#print(new)

#使用loc函数筛选-str.contains函数-筛查'崔'姓的人

#new=file1.loc[file1['收件人姓名'].str.startswitch('崔')]

#print(new)

df = df[(df['DEPOSIT_PAY_TIME_x'] .notnull() ) &(df['DEPOSIT_PAY_TIME_x'] != "" )]

print("during_time(number)=0的个数:",newdata[newdata['during_time(number)'] ==0].count()['during_time(number)'])

print("during_time(number)=1,2,3的个数:",newdata[(newdata['during_time(number)'] >0) &(newdata['during_time(number)'] <4)].count()['during_time(number)'])

print(newdata[newdata['during_time(number)'] ==0])

newdata[newdata['Team']. isin (['England','Italy','Russia'])][['Team','Shooting Accuracy']]

df.年龄.value_counts()

1.修改指定位置数据的值(修改第0行,’创建订单数‘列的值为3836)

new.loc[0,'创建订单数']=3836

2.替换‘小明’-‘xiaoming’

df.replace({'name':{'小明':'xiaoming'}})

3.批量替换某一列的值(把‘性别’列里的男-male,女-felmale)

方法一:df['性别']=df['性别'].map({'男':'male','女':'female'})

方法二:df['性别'].replace('female','女',inplace=True)

               或df['性别']=df['性别'].replace('female','女')                这就是inplace的作用

                +df['性别'].replace('male','男',inplace=True)

4.替换列索引

df.columns=['sex','name','height','age']

或者:df.rename(columns={'性别':'sex','姓名':'name','身高':'height','年龄':'age'})

5.删除某一列

del df['player']

6. 删除某一列(方法二),删除某一行(默认axis=0删除行,为1则删除列)

删除某一列(方法二)

df.drop('性别',axis=1)

删除某一行

df.drop(1,axis=0)

file1=pd.read_csv(file1_path)

file2=pd.read_csv(file2_path)

new1=pd.DataFrame()

new1['phone']=file1['phone']

new1['contact_time']=file1['contact_time']

new2=pd.DataFrame()

new2['phone']=file2['phone']

new2['submission_audit_time']=file2['提交审核时间']

newdata=pd.merge(new1,new2,on='phone',how='left')

df=pd.concat([df1,df2],axis=0)

4.2.2 横向表连接

df=pd.concat([df1,df2],axis=1)

df1['地区'].str.split('·',3,expand=True)

df1:

df1[['城市', '城区','地址']] = df1['地区'].str.split('·', 3, expand = True)

5.1 缺失值删除

data.dropna(axis=0,subset = ["Age", "Sex"])   # 丢弃‘Age’和‘Sex’这两列中有缺失值的行

data.dropna(how = 'all')    # 传入这个参数后将只丢弃全为缺失值的那些行

data.dropna(axis = 1)       # 丢弃有缺失值的列(一般不会这么做,这样会删掉一个特征)

data.dropna(axis=1,how="all")   # 丢弃全为缺失值的那些列

5.2 缺失值填充:pandas.DataFrame.fillna()函数

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

功能:使用指定方法填充NA/NaN值

其中inplace=True就是直接在原有基础上填满

5.3 缺失值查询:

缺失值数量查询:df.isnull().sum()

缺失值行查询:df[df.isnull().T.any()]

newdata['during_time']=pd.to_datetime(newdata['submission_audit_time'])-pd.to_datetime(newdata['contact_time'])

newdata['during_time(number)']=(pd.to_datetime(newdata['submission_audit_time'])-pd.to_datetime(newdata['contact_time'])).apply(lambda x: x.days)

new=pd.DataFrame()

new=newdata[newdata['during_time(number)'] ==0]

new.to_csv(save_path,encoding='utf-8-sig')

将数据按行拆分并存储到不同的csv文件中:

path='C:/Users/EDZ/Desktop/工作/2021.08.19/'

for i in range(0,30):

    df.loc[[i]].to_csv(path+str(i)+'.csv',encoding='gbk')

df = df[['购药日期', '星期','社保卡号','商品编码', '商品名称', '销售数量', '应收金额', '实收金额' ]]

利用python进行数据分析  

链接:  https://pan.baidu.com/s/15VdW4dcuPuIUEPrY3RehtQ

?pwd=3nfn 提取码: 3nfn

本书也可以作为利用Python实现数据密集型应用的科学计算实践指南。本书适合刚刚接触Python的分析人员以及刚刚接触科学计算的Python程序员。

在 pandas 中,存储文本主要有两种方式

但一般建议使用 StringDtype 类型存储文本数据。都是由于各种原因,现在字符串数据的默认存储类型还是 object 。

要存储为 string 类型,需要显式的设置 dtype 参数

或者在创建 Series 或 DataFrame 之后,使用 astype 转换类型

也可以使用 StringDtype/"string" 转换其他非字符串类型的数据

转换现有数据的类型

StringDtype 类型对象与 object 类型之间存在一些差异

两个结果的输出都是 Int64 类型。将其与 object 类型比较

当存在 NA 值时,输出为 float64 。类似地,对于返回布尔值的方法

Series 和 Index 有一套字符串处理方法,可以方便地对数组的每个元素进行操作,最重要的是,这些方法会自动忽略缺失值。

这些方法可以通过 str 属性访问,通常具有与内置字符串方法相匹配的名称

Index 上的字符串方法对于清理或转换 DataFrame 的列特别有用。

例如,您可能有带有前导或后置空格的列

因为 df.columns 是一个 Index 对象,所以我们可以使用 .str 访问器

我们可以根据需要对列名进行处理,然后重新设置列名。

例如,我们删除列名的前后空格,并将其改为小写字母,同时用 _ 替换剩余的空格

split 方法会返回一个值为 list 的 Series

可以使用 get 或 [] 访问拆分后的列表中的元素

更简单的方法是设置 expand 参数,返回一个 DataFrame

当原来的 Series 包含 StringDtype 类型的数据时,输出列也将全部为 StringDtype

当然,也可以设置切割次数

它还有个对应的 rsplit 方法,从右边起始对字符串进行拆分

replace 参数支持使用正则表达式,前两个参数是 pat (匹配模式) 和 repl (替换字符串)

如果只是想要替换字符串字面值,可以将 regex 参数设置为 False ,而不需要对每个特殊字符进行转义。此时 pat 和 repl 参数必须是字符串

此外, replace 方法还接受一个可调用的替换函数,会使用 re.sub() 方法在每个匹配的模式上调用该函数

该函数需要传入一个正则对象作为位置参数,并返回一个字符串。例如

replace 方法的 pat 参数还接受 re.compile() 编译的正则表达式对象。所有的 flags 需要在编译正则对象时设置

如果在 replace 中设置 flags 参数,则会抛出异常

有几种方法可以将一个 Series 或 Index 与自己或其他的 Series 或 Index 相连接,所有这些方法都是基于 cat() 方法

可以连接一个 Series 或 Index 的内容

如果未指定 sep 参数,则默认为空字符串

默认会跳过缺失值,也可以使用 na_rep 指定缺失值的表示方式

cat() 的第一个参数 others 可以是类似列表的对象,但是其长度需要和调用对象一致

只要两个对象中存在缺失值,对应的结果中也是缺失值,除非指定了 na_rep

others 参数也可以是二维的,但是得保证其行数必须与调用的对象一致

对于 Series 或 DataFrame 的连接,可以通过设置 join 参数指定对齐方式

通常 join 可选范围为: 'left' , 'outer' , 'inner' , 'right' 。此时,不再要求两个对象长度一致

当 others 参数是 DataFrame 时,也可以使用

可以将一些类似数组的对象(如 Series , Index 等)放在一个类似列表的容器中,然后传递给 cat

对于没有索引的对象,其长度必须与调用 cat 的对象相同。但是 Series 和 Index 可以是任意的,除非设置了 json=None 。

如果在 others 参数上包含不同索引的对象,且设置了 join='right' ,则最后的结果将会是这些索引的并集