python学习笔记之数据的分析(二)

疫情数据分析

1.导入外部数据
pd.read_csv('文件名')

    查看数据属性:
columns     列名
index	    行索引
shape	    m行n列
dtyps	    各列的类型

2.查找数据
方法1:用列名直接查找
df[[列名列表]]

方法2:用loc查找
df.loc[行取值,列取值]
注意:行取值可以用逻辑值来进行映射,逻辑真(True)会返回,逻辑假(False)会去掉


df.head(n)    #返回前n行,默认为5行
df.tail(n)    #返回后n行,默认为5行

3.
1> 设置表索引
方法1:df.reset_index(drop=True)
       设置行索引为(0-n)
方法2:df.set_index(列名)
	设置某一列为行索引


2> 找数据的最大或最小的n个值
   方法1:df.msmallest(n,列名)
      df.nlargest(n,列名)

   方法2:排序
     df.sort_values(列名,ascending=False/True)    #False降序
     df.sort_index()


 3> 简单的统计函数
df.函数名()
sum()   max()   min()   median()    std()

df.describe()    #描述性统计   (一次可以统计出多个结果)


 4> 处理与时间有关的数据
pd.to_datetime(时间列名)     #将字符格式的时间数据,转换为日期时间格式

    补充知识的:查找数据
   df.iloc[行位置,列位置]    #iloc中只能是数字,不能是列名等文本

   df.loc[行索引,列索引]     #loc中必须是索引。

 5> 提取时间中的年,月,日,星期
year,month,day,weekday
#功能2--数据分析代码
import pandas  as pd
pd.set_option('display.unicode.ambiguous_as_wide',True)  
pd.set_option('display.unicode.east_asian_width',True)
# 函数1--打开文件
def open_def(file_name):
    file_name1 = open(file_name,encoding='utf-8')   #用open命令按照utf-8格式打开
    file_v1 = pd.read_csv(file_name1)     #然后用pandas的命令读文件
    file_v2 = file_v1.drop('Unnamed: 0',axis=1)    #删除列,
    #查看属性
#     print("查看属性如下:".center(30,"="))
#     print("列名有:\n",file_v2.columns)
#     print('\n行索引是:\n',file_v2.index)
#     print('\n形状是:\n',file_v2.shape)
#     print('\n各列的类型是:\n',file_v2.dtypes)
    return file_v2

# 函数2--查找数据
def find_def(file_v1,col_name,k):
    find_v1 = file_v1.loc[:,col_name].head(k)
    return find_v1


# 函数3--统计数据
def stat_def(file_v1,b_v1,num_v1):
    result_v1 = file_v1.sort_values('当天确诊',ascending=b_v1).head(int(num_v1))
    return result_v1
    

#函数4 -- 分组聚合
def group_def(file_v4,group_v1):
    file_v6 = file_v4.set_index("时间")    #把时间作为索引
    if group_v1 == "1":
        file_v6.index = file_v6.index.month  #提取时间中的日作为索引
    elif group_v1 == "2":
        file_v6.index = file_v6.index.day  #提取时间中的日作为索引
    elif group_v1 == "3":
        file_v6.index = file_v6.index.weekday  #提取时间中的日作为索引
    else:
        print("您输入的有误")
    #分组聚合
    result_v2 = file_v6.loc[:,['当天疑似','当天确诊']].groupby(file_v6.index).agg(['sum','max','min'])
    return result_v2


#主函数
def main():
    file_name = "china_hist_data.csv"
    file_v1 = open_def(file_name)
#     return file_v1
    sel_v1 = input('请输入您的操作:1.查找 2.统计数据 3.分组聚合')
    
    if sel_v1 == "1":
        while True:
            print("您可以选择以下数据\n"+"|".join(list(file_v1.columns)))
            col_name = input("请输入您要查找的值(注意:多个值时,中间用空格分隔),输入0时,结束查找")

            if col_name == "0":
                break
            col_num = input("请输入您要显示的行数")    
            try:
                find_v1 = find_def(file_v1,col_name.split(' '),int(col_num))
                print(find_v1)
            except KeyError:
                print("没有您要找的值")
        return find_v1
    elif sel_v1 == "2":
        sel_v2 = input("请输入您的选择1.较大的 2.较小的")
        num_v1 = input("请输入要查看的个数")
        if sel_v2 == "1":
            result_v1 = stat_def(file_v1,False,num_v1)
        elif sel_v2 == "2":
            result_v1 = stat_def(file_v1,True,num_v1)
        else:
            print("没有您的需求")
        return result_v1
    
    elif sel_v1 == "3":
        sel_v2 = input("请输入分组方法:1.月 2.日  3.星期")
        #将字符串类型,转换为日期时间类型
        file_v1['时间'] = pd.to_datetime(file_v1['时间']) 
        file_v4 = file_v1.iloc[:,[1,5,6,9,10,11,13]]
        result_v2 = group_def(file_v4,sel_v2)
        return result_v2
    else:
        print("您输入的有误")
#函数入口
if  __name__ == "__main__":
    file_v1 = main()

file_v1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值