学习笔记 Day 28 (pandas )

1 统计出911电话类型数量

import  pandas as pd
import numpy as np

df = pd.read_csv('./911.csv')

# print(df.head())
# print(df.info())

# print(df['title'])
# print(df['title'].str.split(':').tolist())
temp_list = df['title'].str.split(':').tolist() # 把元素按,分隔开,然后装入列表
type_list = list(set(i[0] for i in temp_list)) # 循环列表,去重得出所有的类型装进列表中
# print(type_list)

# 创建一个全为零的列表
pd_zeros = pd.DataFrame(np.zeros((df.shape[0],len(type_list))),columns=type_list)
# print(pd_zeros)

# 往里面填充1
for i in type_list:
    pd_zeros[i][df['title'].str.contains(i)] = 1# contains(i) 包含i的时候,返回True
print(pd_zeros)

print(pd_zeros.sum(axis=0))

使用分组聚合方式:

import  pandas as pd
import numpy as np

df = pd.read_csv('./911.csv')

# print(df.head())
# print(df.info())

# print(df['title'])
# print(df['title'].str.split(':').tolist())
temp_list = df['title'].str.split(':').tolist() # 把元素按,分隔开,然后装入列表
type_list = [i[0] for i in temp_list] # 循环列表,去重得出所有的类型装进列表中

df['type'] = pd.DataFrame(np.array(type_list).reshape((df.shape[0],1)))
print(df)

print(df.groupby(by='type').count()['title'])

生成一段时间范围:

 常见频率缩写:

 pandas重采样:

统计数据中不同月份电话次数和可视化展示:

import  pandas as pd
import numpy as np

df = pd.read_csv('./911.csv')

df['timeStamp'] = pd.to_datetime(df['timeStamp']) # 转为时间序列

df.set_index('timeStamp',inplace=True)

# print(df)

df_count = df.resample('M').count()['title']

# print(df_count)
import matplotlib.pyplot as plt

plt.figure(figsize=(20,8),dpi=80)

_x = df_count.index
_y = df_count.values

_x = [i.strftime("%Y-%m-%d") for i in _x]# 时间格式化

plt.plot(range(len(_x)),_y)

plt.xticks(range(len(_x)),_x,rotation=45)

plt.show()

 不同月份,不同类型:

import  pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('./911.csv')

df['timeStamp'] = pd.to_datetime(df['timeStamp']) # 转为时间序列

# 增加列
temp_list = df['title'].str.split(':').tolist()
type_list = [i[0] for i in temp_list]
# print(type_list)
df['type'] = type_list
# print(df)

df.set_index('timeStamp',inplace=True)
#
# # print(df)
plt.figure(figsize=(20,8),dpi=80)
for type_name,type_data in df.groupby(by='type'):

    df_count = type_data.resample('M').count()['title']
#
# # print(df_count)




    _x = df_count.index
    _y = df_count.values

    _x = [i.strftime("%Y-%m-%d") for i in _x]# 时间格式化

    plt.plot(range(len(_x)),_y)

    plt.xticks(range(len(_x)),_x,rotation=45)

plt.show()

结果:

Periodindex:

就是把分开的字符串通过period index组合成pandas时间类型 

以pm2.5的数据为列:

import pandas as pd
import  matplotlib.pyplot as plt

df = pd.read_csv('./BeijingPM20100101_20151231.csv')

# print(df.head())

# 设置好时间索引
period = pd.PeriodIndex(year=df['year'],month=df['month'],day=df['day'],hour=df['hour'],freq='H')

# print(period)

df['datetime'] = period

df.set_index('datetime',inplace=True)

df = df.resample('7D').mean()

# print(df)

df['PM_US Post'].dropna()

data = df['PM_US Post']

# 可视化

_x = data.index
_x = [i.strftime('%Y-%m-%d') for i in _x]
_y = data.values

plt.figure(figsize=(20,8),dpi=80)

plt.xticks(range(0,len(_x),10),_x[::10],rotation=45)

plt.plot(range(len(_x)),_y)

plt.show()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值