首页 > 其他分享 >9 Pandas之DateFrame&数据可视化

9 Pandas之DateFrame&数据可视化

时间:2024-08-14 16:27:33浏览次数:17  
标签:index df DataFrame DateFrame 可视化 pd print Pandas Population

 欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力

对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:[email protected] 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

    专栏:

文章概述:对 Pandas之DateFrame&数据可视化的介绍

关键词:Pandas之DateFrame&数据可视化

本文目录

DataFrames

Pandas之DataFrame取值和切片

indexing, selecting, slicing

conditional selection (boolean arrays)

丢弃数据

操作 广播机制

DataFrame操作之添加列、修改行列名称、inplace参数

renaming columns

DataFrame操作之添加行、根据已有列创建新的列、设置某列为索引、head、tail、describe

添加

通过其它列创建新的列

查看头部和尾部信息

统计信息

Pandas读取本地CSV文件

reading external data

添加自己的columns

Pandas数据可视化

pandas 绘图

调节画布大小

行列限定绘制内容并添加标题

绘制其他图形

DataFrame按值或按索引排序、apply函数

sorting and functions

DataFrame数据框merge整合、dropna与fillna函数

join、merge

处理缺失值

DataFrames

import numpy as np
import pandas as pd

df = pd.DataFrame({
  'Population': [35.467, 63.951, 80.940, 60.665, 127.061, 64.511, 318.523],
  'GDP': [
    1785387,
    2833687,
    3874437,
    2167744,
    4602367,
    2950039,
    17348075
   ],
  'Surface Area': [
    9984670,
    640679,
    357114,
    301336,
    377930,
    242495,
    9525067
   ],
  'HDI': [
    0.913,
    0.888,
    0.916,
    0.873,
    0.891,
    0.907,
    0.915
   ],
  'Continent': [
    'America',
    'Europe',
    'Europe',
    'Europe',
    'Asia',
    'Europe',
    'America'
   ]
}, columns=['Population', 'GDP', 'Surface Area', 'HDI', 'Continent'])


print(df) # 有行有列,像table表一样的,dataframe的每一列就是一个series,也就是说我们可以把dataframe看成是一系列series的组合


# 我们可以像之前一样去给上index
df.index = [
  'canada',
  'France',
  'Germany',
  'Italy',
  'Japan',
  'United Kingdom',
  'United States'
]

print("-----------------------------------------------------------------------------------------")
print(df)
print("-----------------------------------------------------------------------------------------")
print(df.columns)
print("-----------------------------------------------------------------------------------------")
print(df.index)
print("-----------------------------------------------------------------------------------------")
print(df.info()) # 会告诉我们每列的数据类型,还会告诉我们有没有空值,有助于我们去做数据清洗data clean
print("-----------------------------------------------------------------------------------------")
print(df.size)
print("-----------------------------------------------------------------------------------------")
print(df.shape)
print("-----------------------------------------------------------------------------------------")
print(df.describe()) # 给出可以统计的列的统计值
print("-----------------------------------------------------------------------------------------")
print(df.dtypes) #查看每一columns的数据类型
print("-----------------------------------------------------------------------------------------")
print(df.dtypes.value_counts())

Pandas之DataFrame取值和切片

indexing, selecting, slicing

print(df)
print(df.loc['canada']) # 选择整行
print(df.iloc[-1]) # 选择最后一整行
print(df['Population']) # 选择整列
# 但是不管选择一行一列,返回给我们的都是series
print(df['Population'].to_frame())#又将一维数组series转换成了表格
#multiple indexing
print(df[['Population', 'GDP']])
print(df[1:3])
print(df.loc['Italy'])
print(df.loc['France': 'Italy'])
print("---------------------------------------------------------")
#通常使用 loc和iloc
#行和列
# 同时操作两个维度
print(df.loc['France':'Italy', 'Population'])
print(df.loc['France':'Italy', ['Population','GDP']])

# 对于iloc也是一样
print(df)
print(df.iloc[0])
print(df.iloc[-1])

print(df.iloc[[0, 1, -1]])
print(df.iloc[1:3])
print(df.iloc[1:3, 3])
print(df.iloc[1:3, [0,3]])
print(df.iloc[1:3, 1:3])

DataFrame操作之布尔取值、丢弃数据、广播机制

conditional selection (boolean arrays)

DataFrame操作之布尔取值、丢弃数据、广播机制print(df)
 print(df['Population']>70)
 print(df.loc[df['Population']>70])
 print(df.loc[df['Population']>70, 
'Population'])
 print(df.loc[df['Population']>70, 
['Population', 'GDP']])

丢弃数据

 print(df)
 print(df.drop('canada')) #丢弃行
 print(df.drop(['canada', 'Japan'])) #丢弃两行
 print(df.drop(columns=['Population', 'HDI'])) #丢弃列
 print(df.drop(['Italy', 'canada'], axis=0))  #丢弃行,更清楚的写法
 print(df.drop(['Population', 'HDI'], axis=1)) #丢弃列
 print(df.drop(['Italy', 'canada'], 
axis='rows')) #丢弃行
 print(df.drop(['Population', 'HDI'], 
axis='columns')) #丢弃列'

# 可以永久删除某一个行
df.drop('China', inplace=True)
print(df)

操作 广播机制

 print(df)
 print(df[['Population', 'GDP']])
 print(df[['Population', 'GDP']] / 100)
 print("-----------------------------------------")
 # 广播机制
crisis = pd.Series([-1_000_000, -0.3], index=['GDP', 'HDI'])
print(crisis)
print(df[['GDP','HDI']] + crisis)
print(df)

修改dataframe,之前的操作统统都会返回一个新的dataframe

DataFrame操作之添加列、修改行列名称、inplace参数

添加列

# 添加新的一列
langs = pd.Series(['French', 'German', 'Italian'],index=['France', 'Germany', 'Italy'],name='Language')
df['Language']=langs#列创建
print(df) # 虽然language只有几种但是没有关系,NaN意味着空
df['Language']='English' # 将改变这一列所有
print(df)

renaming columns

print(df)
print("-----------------------------------------")
print(df.rename(columns={'HDI':'Human Development Index' ,'Anual Popcorn Consumption': 'APC'}, 
index={'United States': 'USA','United Kingdom': 'UK','Argentina': 'AR'}))
print("-----------------------------------------")
print(df)  # 不存在的就改不了,而且是返回新的dataframe,之前的dataframe并没有变
print("-----------------------------------------")
print(df.rename(index=str.upper))
print("----------------------------------------

DataFrame操作之添加行、根据已有列创建新的列、设置某列为索引、head、tail、describe

添加

# 添加值,会返回一个新的DataFrame
print(df._append(pd.Series({
    'Population':3,
    'GDP':5
}, name='China')))
print(df)
print("-----------------------------------------------")
# 可以直接设置新的index和values
df.loc['China'] = pd.Series({'Population':
  1_400_000_000, 'Continent':'Asia'})
print(df)

Population GDP Surface Area HDI Continent

0 35.467 1785387 9984670.0 0.913 America

1 63.951 2833687 640679.0 0.888 Europe

2 80.940 3874437 357114.0 0.916 Europe

3 60.665 2167744 301336.0 0.873 Europe

4 127.061 4602367 377930.0 0.891 Asia

5 64.511 2950039 242495.0 0.907 Europe

6 318.523 17348075 9525067.0 0.915 America

China 3.000 5 NaN NaN NaN

Population GDP Surface Area HDI Continent

0 35.467 1785387 9984670 0.913 America

1 63.951 2833687 640679 0.888 Europe

2 80.940 3874437 357114 0.916 Europe

3 60.665 2167744 301336 0.873 Europe

4 127.061 4602367 377930 0.891 Asia

5 64.511 2950039 242495 0.907 Europe

6 318.523 17348075 9525067 0.915 America

-----------------------------------------------

Population GDP Surface Area HDI Continent

0 3.546700e+01 1785387.0 9984670.0 0.913 America

1 6.395100e+01 2833687.0 640679.0 0.888 Europe

2 8.094000e+01 3874437.0 357114.0 0.916 Europe

3 6.066500e+01 2167744.0 301336.0 0.873 Europe

4 1.270610e+02 4602367.0 377930.0 0.891 Asia

5 6.451100e+01 2950039.0 242495.0 0.907 Europe

6 3.185230e+02 17348075.0 9525067.0 0.915 America

China 1.400000e+09 NaN NaN NaN Asia

在 Pandas 中,reset_index 和 set_index 方法都返回新的 DataFrame,原始 DataFrame 不会被修改,除非使用 inplace=True 参数。要彻底改变 DataFrame 的索引,需要将这两个方法的结果保存到一个新的 DataFrame 变量中,或者使用 inplace=True 直接在原始 DataFrame 上进行修改。

以下是如何使用这两个方法并打印结果的示例:

import pandas as pd

# 创建一个示例 DataFrame
df = pd.DataFrame({
    'Population': [1, 2, 3],
    'GDP': [1000, 2000, 3000]
}, index=['A', 'B', 'C'])

print("原始 DataFrame:")
print(df)

# 使用 reset_index 恢复原始索引,并创建新的 DataFrame
df_reset = df.reset_index()
print("\n使用 reset_index 后的 DataFrame:")
print(df_reset)

# 使用 set_index 更改索引,并创建新的 DataFrame
df_set_index = df_reset.set_index('Population')
print("\n使用 set_index 后的 DataFrame:")
print(df_set_index)

在这个示例中:

df_reset 是将索引重置后的 DataFrame,其中原来的索引被恢复为默认的整数索引。

df_set_index 是将 'Population' 列设置为新的索引后的 DataFrame。

如果想直接在原始 DataFrame 上进行修改,可以这样做:

df.reset_index(inplace=True)
df.set_index('Population', inplace=True)
#这将直接在 df 上应用修改,而不需要创建新的 DataFrame。

通过其它列创建新的列

print(df)
print(df[['Population', 'GDP']])
print(df['GDP']/df['Population'])
print("-----------------------------------------")
#用等号赋值,进行了真正的改变
df['GDP Per capita'] = df['GDP'] / df['Population']

print(df)

查看头部和尾部信息

print(df.head(n=3))
print(df.tail(n=10))

统计信息

print(df)
print(df.describe())

population = df['Population']
population.min()
population.max()
population.mean()
population.std()#标准差
population.median()#中位数
population.describe()
population.quantile(.25)#
population.quantile([.2, .4, .6, .8, 1])

Pandas读取本地CSV文件

reading external data

 import numpy as np
 import pandas as pd
 df = pd.read_csv('BTC-Daily.csv')
 print(df.head())

通过结果分析可得,它默认把0301的一行当成了column

这是不对的,我对它进行优化

  • header=None:表示数据文件的第一行不包含列名。Pandas 将不会将第一行数据视为列名,而是将其视为数据的一部分。
  • 默认行为:如果不指定 header 参数,Pandas 会默认将文件的第一行作为列名。这适用于文件中的第一行包含列标签的情况。
 import numpy as np
 import pandas as pd
 df = pd.read_csv('BTC-Daily.csv',header=None)
 print(df.head())

添加自己的columns

df.columns=['unix','date','symbol','open','high','low','close','Volumn BTC','Volumn USD']
print(df.head())

# 日期格式是object,而不是日期类型
df.columns = ['Timestamp', 'Price']
print(df.head())
print(df.shape)

df.info() #datetime 是object  相当于字符串 ,不需要print打印

#pandas中有自己的日期类型,我们将他转化一下(也可以创建一个新的column添加)
df['date']=pd.to_datetime(df['date']).head()
print(df.head())
print("--------------------------------------")
df.info()

df.info()

# 将 datetime 对象转换回字符串格式
df['date_str'] = df['date'].dt.strftime('%Y-%m-%d %H:%M:%S')

# 打印转换后的字符串格式
print("\nString format:")
print(df['date_str'].head())

#重新添加一项新的column
df['Timestamp']=pd.to_datetime(df['date_str'])
print(df.head())
print(df.dtypes)
df.set_index('Timestamp', inplace=True)
print(df.head())
# 这样去做的好处是可以方便进行查询数据

print(df.loc['2022-02-28'])

# 有更好的方式一行搞定上面的代码
df = pd.read_csv(
  'BTC-Daily.csv',
  header=None,
  names=['unix','date','symbol','open','high','low','close','Volumn BTC','Volumn USD'],
  parse_dates=True ,#自动将date转换成datetime的形式
  index_col=1 # 第二列(date)作为index
)
print(df.head())

Pandas数据可视化

pandas 绘图

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

# 有更好的方式一行搞定上面的代码
df = pd.read_csv(
  'BTC-Daily.csv',
  header=None,
  names=['unix','date','symbol','open','high','low','close','Volumn BTC','Volumn USD'],
  parse_dates=True ,#自动将date转换成datetime的形式
  index_col=1 # 第二列(date)作为index
)
print(df.head())
#指定绘制的线
df[['open','high','low','close']].plot()
plt.show()

调节画布大小

df[['open','high','low','close']].plot(figsize=(12,6))  #调节画布大小

行列限定绘制内容并添加标题

#df.index.is_monotonic_increasing 用于检查索引是否按升序排列
if not df.index.is_monotonic_increasing:
    df = df.sort_index()

df.loc['2019-01-01':'2022-12-31',['open','high','low','close']].plot(figsize=(12,6),
  title='BitCoin Price 2019-2022')

绘制其他图形

df.plot.hist()  #频次直方图
df.plot.pie()	#饼图
df.plot.bar()	#柱状图
df.plot.barh()	#横向的柱状图

DataFrame按值或按索引排序、apply函数

sorting and functions

import pandas as pd
import numpy as np
# 有更好的方式一行搞定上面的代码
df = pd.read_csv(
  'BTC-Daily.csv',
  header=None,
  names=['unix','date','symbol','open','high','low','close','Volumn BTC','Volumn USD'],
  parse_dates=True ,#自动将date转换成datetime的形式
  index_col=1 # 第二列(date)作为index
)


#指定计算的值
print(df[['open','high','low','close']].apply(np.sqrt))
print("--------------------------------------------------------")
print(df[['open','high','low','close']].apply(np.sum,axis=0))
print("--------------------------------------------------------")
print(df[['open','high','low','close']].apply(lambda x:x/10))
print("--------------------------------------------------------")
#sort
df.sort_index(inplace=True)
print(df)
print("--------------------------------------------------------")
df.sort_values(by=['open','close'])

DataFrame数据框merge整合、dropna与fillna函数

join、merge

import pandas as pd

names = {
  'SSN': [ 2,5,7,8],
  'Name': ['Anna','Bob','John','Mike']
}
df1 = pd.DataFrame(names)

ages = {
'SSN': [1,2,3,4],
'Age': [28, 34, 45, 62]
}

df2 = pd.DataFrame(ages)
df = pd.merge(df1, df2, on='SSN', how='outer')  # 默认是交集 left (第一个参数的全部保留)right
df.set_index('SSN', inplace=True)
print(df)

处理缺失值

 import numpy as np
 import pandas as pd
 
 #isna
print(df.isna()) #NaN的地方显示为True

#dropna
print(df.dropna())  #有NaN的一行就直接删掉
print(df.dropna(axis='columns'))  #有NaN的一栏就直接删掉
print(df.dropna(how='all')) #默认相当于是any

#fill
print(df.fillna(-999)) #将有NaN的地方默认填充为-999

标签:index,df,DataFrame,DateFrame,可视化,pd,print,Pandas,Population
From: https://blog.csdn.net/ta683280/article/details/141102869

相关文章

  • 前端可视化大屏适配方案
    最开始比较流行的三大解决方式:rem方案动态设置 HTML 根字体大小和 body 字体大小,配合百分比或者 vw/vh 实现容器宽高、字体大小、位移的动态调整vw/vh方案将像素值(px)按比例换算为视口宽度(vw)和视口高度(vh),能够实时计算图表尺寸、字体大小等scale方案根据宽高......
  • 数据分析 Numpy+Scipy+Matplotlib+Pandas
    数据分析Numpy+Scipy+Matplotlib+Pandas基础数值算法科学计算数据可视化序列高级函数一、numpy是什么?1.NumericalPython,数值的Python,补充了Python语言所欠缺的数值计算能力。2.Numpy是其它数据分析及机器学习库的底层库。3.Numpy完全标准C语言实现,运行效率充分优化。......
  • webpack打包可视化分析之--webpack-bundle-analyzer
    在开发一些项目的时候,有时候有些旧的框架项目用的webpacke打包慢,打包出来的包文件大,然而我们想要对它进行优化分析,有些旧的项目可能在不断迭代的过程中,有些模块功能改造或者有些需求变化,有些新需求模块开发测试完后,后面旧的模块功能有些不用等需要注释或者删掉,但是由于多人协作......
  • 用R做数据重塑,数据的特征缩放和特征可视化
    由于数据往往复杂多样,其中不同的特征变量可能具有不同的数值范围,这使得特征缩放成为一个必要的步骤。例如,当我们要处理医学数据时,对于同一个患者,肺活量的变化范围可能在1000到5000之间,而体重指数(BMI)的变化范围则可能在10到50之间,其他一些生理指标甚至可能处于-0.1到0.1的微小......
  • 【项目实战】基于Python的网络小说榜单信息爬取与数据可视化系统
    注意:该项目只展示部分功能,如需了解,文末咨询即可。本文目录1.开发环境2系统设计2.1设计背景2.2设计内容3系统页面展示3.1用户页面3.2管理员页面3.3功能展示视频4更多推荐5部分功能代码5.1爬虫代码5.2小说代码1.开发环境开发语言:Python技术框架:Fla......
  • DBeaver 数据库可视化工具安装教程(图文教程)
    DBeaver是一款流行的数据库管理工具,广泛用于数据库开发和管理。它支持多种数据库类型,包括关系型数据库和NoSQL数据库。支持多种数据库,包括MySQL、PostgreSQL、SQLite、Oracle、SQLServer、DB2、Sybase、Teradata、Firebird、ApacheHive、Phoenix、Presto、MongoDB、C......
  • 基于Dango+微信小程序的广西东盟旅游资源信息管理系统+80003(免费领源码)可做计算机毕业
    django广西-东盟旅游资源信息管理系统小程序摘 要在社会快速发展和人们生活水平提高的影响下,旅游产业蓬勃发展,旅游形式也变得多样化,使旅游资源信息的管理变得比过去更加困难。依照这一现实为基础,设计一个快捷而又方便的基于小程序的旅游资源信息管理系统是一项十分重要并且......
  • 计算机毕业设计Hadoop+Hive居民用电量分析 居民用电量可视化 电量爬虫 机器学习 深度
    《Hadoop居民用电量分析》开题报告一、研究背景与意义能源问题在全球范围内一直是热点议题,尤其是随着居民生活水平的提高和城市化进程的加快,居民用电量急剧增长,对电力系统的稳定运行和能源管理提出了更高要求。如何科学合理地管理和分析居民用电量数据,成为提升能源利用效率、......
  • 计算机毕业设计Python+Tensorflow股票推荐系统 股票预测系统 股票可视化 股票数据分析
    基于Tensorflow的股票推荐与预测系统的设计与实现开题报告一、研究背景与意义在信息技术高速发展的今天,金融市场日益复杂,投资者面临着越来越多的选择和挑战。股票作为金融市场的重要组成部分,其价格波动受到多种因素的影响,包括宏观经济、政策变化、公司业绩等。因此,如何准确......
  • Python酷库之旅-第三方库Pandas(076)
    目录一、用法精讲311、pandas.Series.str.encode方法311-1、语法311-2、参数311-3、功能311-4、返回值311-5、说明311-6、用法311-6-1、数据准备311-6-2、代码示例311-6-3、结果输出312、pandas.Series.str.endswith方法312-1、语法312-2、参数312-3、功能312-......