05 Pandas(1)

# Author:Nimo_Ding

import pandas as pd
import numpy as np

# Pandas 可以说是基于 NumPy 构建的含有更高级数据结构和分析能力的工具包。
# 基于Series(一维的序列)和DataFrame(二维的表结构)这两个核心数据结构,pandas可以对数据进行导入清洗处理统计和输出
# Series是定长的字典序列,相当于两个ndarray,这也是和字典结构最大的不同,因为在字典的结构里,元素的个数是不固定的。
# Series有两个基本属性:index和values,在Series结构中,index默认是0、1、2。。。递增的整数序列。
# 当然也可以自己指定索引,比如index=['a','b','c','d']

import pandas as pd
from pandas import Series,DataFrame
x1=Series([1,2,3,4])
x2=Series(data=[1,2,3,4],
          index=['a','b','c','d'])
print(x1)
'''
0    1
1    2
2    3
3    4
dtype: int64
'''

print(x2)
'''
a    1
b    2
c    3
d    4
dtype: int64
'''

# 采用字典的方式来创建Series:
d={
    'a':1,
    'b':2,
    'c':3,
    'd':4
}
x3=Series(d)
print(x3)
'''
a    1
b    2
c    3
d    4
dtype: int64
'''


# DataFrame类型数据结构类似数据库表
# 它包括了行索引和列索引,我们可以将DataFrame看成是由相同索引的Series组成的字典类型。

# 示例,输出考试成绩:
import pandas as pd
from pandas import Series,DataFrame
data={
    'Chinese':[66,95,93,90,80],
    'English':[65, 85, 92, 88, 90],
    'Math':[30, 98, 96, 77, 90]
}
df1=DataFrame(data)
df2=DataFrame(data,
              # 行索引
              index=['zhangfei','guanyu','zhaoyun','huangzhong','dianwei'],
              # 列索引
              columns=['English','Math','Chinese'])
print(df1)
'''
   Chinese  English  Math
0       66       65    30
1       95       85    98
2       93       92    96
3       90       88    77
4       80       90    90
'''

print(df2)
'''
            English  Math  Chinese
zhangfei         65    30       66
guanyu           85    98       95
zhaoyun          92    96       93
huangzhong       88    77       90
dianwei          90    90       80
'''

# pandas允许直接从xlsx、csv等文件中导入数据,也可以输出到xlsx、csv等文件,非常方便。
# import pandas as pd
# from pandas import Series, DataFrame
# score = DataFrame(pd.read_excel('data.xlsx'))
# score.to_excel('data1.xlsx')
# print score


print('\n数据清洗:')
data = {'Chinese': [66, 95, 93, 90,80],
        'English': [65, 85, 92, 88, 90],
        'Math': [30, 98, 96, 77, 90]}
df2=DataFrame(data,
              index=['ZhangFei','GuanYu','ZhaoYun','HuangZhong','DianWei'],
              columns=['English', 'Math', 'Chinese'])
print(df2)
'''
            English  Math  Chinese
ZhangFei         65    30       66
GuanYu           85    98       95
ZhaoYun          92    96       93
HuangZhong       88    77       90
DianWei          90    90       80
'''

# 删除DataFrame中不必要的列或行
# df2=df2.drop(columns=['Chinese']) # 删除列
# df2=df2.drop(index=['ZhangFei'])  # 删除行

# 重命名列名columns
# df2.rename(columns={
#     'Chinese':'Yuwen',
#     'English':'Yingyu'
# },inplace=True)
# print(df2)

# 去重复的值
df2=df2.drop_duplicates()

# 格式问题:
print('\n# 1、更改数据格式')
# df2['Chinese'].astype(np.int64) # Chinese字段的值改成int64类型
df2['Chinese']=df2['Chinese'].astype('str')    # Chinese字段的值改成str类型
print(df2['Chinese'])

# 2、删除数据间的空格
df2['Chinese']=df2['Chinese'].map(str.strip)
df2['Chinese']=df2['Chinese'].map(str.lstrip)
df2['Chinese']=df2['Chinese'].map(str.rstrip)

# 删除数据中某个特殊的符号$
df2['Chinese']=df2['Chinese'].str.strip('$')

print('\n# 3、大小写转换')
# df2.columns=df2.columns.str.upper() # 全部大写
# df2.columns=df2.columns.str.lower() # 全部小写
# df2.columns=df2.columns.str.title() # 首字母大写


print('\n# 查找空值')
data = {'语文': [66, 95, 93, 90,80],
        '英语': [65, 85, 92, 88, 90],
        '数学': [None, 98, 96, 77, 90]}
df=DataFrame(data,
              index=['张飞','关羽','赵云','黄忠','典韦'],
              columns=['语文', '英语', '数学'])
print(df)
print(df.isnull())        # 看出表中哪一个值为none。
'''

       语文     英语     数学
张飞  False  False   True
关羽  False  False  False
赵云  False  False  False
黄忠  False  False  False
典韦  False  False  False
'''

print(df.isnull().any())  # 看出哪一列有none值,会显示为True。
'''
语文    False
英语    False
数学     True
dtype: bool
'''

print('\n使用apply函数对数据进行清洗:')
# apply函数式pandas中自由度非常高的函数,使用频率也高。
df['语文'].astype('int')
# df['语文']=df['语文'].apply(str.upper)

print(df)
'''
    语文  英语    数学
张飞  66  65   NaN
关羽  95  85  98.0
赵云  93  92  96.0
黄忠  90  88  77.0
典韦  80  90  90.0
'''

print('\n# 定义函数:')
def double_df(x):
    return 2*x
df['语文']=df['语文'].apply(double_df)
print(df)
'''
     语文  英语    数学
张飞  132  65   NaN
关羽  190  85  98.0
赵云  186  92  96.0
黄忠  180  88  77.0
典韦  160  90  90.0
'''


# 定义函数:新增两列:
def plus(df,n,m):
    df['new1']=(df['语文']+df['英语'])*m
    df['new2']=(df['语文']+df['英语'])*n
    return df

# axis=1表示按照列为轴进行操作,args后是传递的两个参数。
df=df.apply(plus,axis=1,args=(2,3,))
print(df)
'''
       语文    英语    数学   new1   new2
张飞  132.0  65.0   NaN  591.0  394.0
关羽  190.0  85.0  98.0  825.0  550.0
赵云  186.0  92.0  96.0  834.0  556.0
黄忠  180.0  88.0  77.0  804.0  536.0
典韦  160.0  90.0  90.0  750.0  500.0
'''



print('\n数据统计:')
# pandas和numpy一样都有常用的统计函数,如果遇到空值nan,会自动排除。
# describe函数最简便。
print(df1.describe())
'''
数据统计:
         Chinese    English       Math
count   5.000000   5.000000   5.000000
mean   84.800000  84.000000  78.200000
std    11.987493  10.931606  28.163807
min    66.000000  65.000000  30.000000
25%    80.000000  85.000000  77.000000
50%    90.000000  88.000000  90.000000
75%    93.000000  90.000000  96.000000
max    95.000000  92.000000  98.000000
'''


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值