Python数据分析之数据载入及初步观察

  • 本文为个人复现GitHub项目Hands-on data analysis第一章的练习记录
  • 参考教材:《Python for Data Analysis》

一、数据载入及初步观察

🚩 1.1 载入数据

1.1.1 导入numpy和pandas

import numpy as py
import pandas as pd

1.1.2 载入数据

  • 使用绝对路径载入数据
df1 = pd.read_csv('/Users/[yourFilePath]/hands-on-data-analysis-master/hands-on-data-analysis-master/第一单元项目集合/train.csv')
  • 使用相对路径载入数据
df = pd.read_csv('./train.csv')
  • Output:
    1.1.2output
  • 使用 pd.read_table() 载入数据
df2 = pd.read_table('./train.csv')
#df2 = pd.read_table('./train.csv', sep = ',')
df2.head()
  • Output
    output1.1.2.1

💡 pandas 数据载入参数格式

pandas.read_table(数据文件名, sep=’\t’, header=’infer’, names=None,index_col=None, dtype=None, engine=None, nrows=None)
pandas.read_csv(数据文件名, sep=,, header=’infer’, names=None, index_col=None,dtype=None, engine=None, nrows=None)
  • CSV为逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
  • TSV与CSV类似,但使用制表符’\t’隔开每一列数据
  • 加载’.csv’使用read_csv,加载 ‘.tsv’ 使用read_table
    read_table和read_csv区别于read_table以制表符’\t’分隔,而read_csv以逗号/字符分隔
  • 如果想用read_table读取出read_csv的效果,设置sep = ','即可

1.1.3 逐块读取

  • 当数据量过大时直接读取文件内存可能会不够用,这时可使用chunksize指定行数,将文本分成若干块,每次处理chunksize行的数据,最终返回一个TextParser对象并对该对象进行迭代历遍,可完成逐块的数据处理
  • chunksize为每次读取的行数
chunker = pd.read_csv('./train.csv', chunksize = 100)

1.1.4 修改表头和索引

  • 直接读取的时候修改
df = pd.read_csv('train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],
	index_col='乘客ID',header=0)
  • dataframe里修改表头(可随意修改个数)
data_df.rename(columns={'PassengerId': '乘客ID', 'Survived': '是否幸存', 'Pclass': '乘客等级(1/2/3等舱位)', 'Name': '乘客姓名', 
                        'Sex': '性别', 'Age': '年龄', 'SibSp': '堂兄弟/妹个数', 'Parch': '父母与小孩个数', 'Ticket': '船票信息', 
                        'Fare': '票价', 'Cabin': '客舱', 'Embarked': '登船港口'},index = '乘客ID', inplace = True)
  • dataframe里暴力修改表头
data2_df.columns = ['乘客ID', '是否幸存', '乘客等级(1/2/3等舱位)', '乘客姓名', '性别', '年龄', '堂兄弟/妹个数', 
                    '父母与小孩个数', '船票信息', '票价', '客舱', '登船港口']

🚩 1.2 初步观察

1.2.1 查看数据的基本信息

df.info()  # 打印摘要
df.describe()  # 打印描述性统计信息
df.dtypes  # 数据类型
df.values  # 数组形式
df.to_numpy()  # 数组形式
df.shape  # DataFrame行数和列数
df.columns # 列标签<Index>
df.columns.values # 列标签<ndarray>
df.index  # DataFrame行标签<Index>
df.index.values  # 行标签<ndarray>
df.head(n) # 前n行
df.tail(n) # 后n行
df.options.display.max_columns=n # 最多显示n列
df.options.display.max_rows=n  # 最多显示n行
df.memory_usage()  # 占用内存

1.2.2 判断数据空值

df.isnull()

🚩 1.3 保存数据

df.to_csv('train_chinese.csv', encoding = 'utf_8_sig')

💡 若不想存索引,则增加 index = False
✔️ 不同操作系统保存下来可能会有乱码,可以尝试 encoding = ‘gbk’ / ‘utf-8’ / '…'等

🚩 1.4 知道你的数据叫什么

1.4.1 pandas 数据类型: Series 和DataFrame

  • Series只有行索引,由一组数据及其标签组成
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1

Output
output1.4.1.1

  • DataFrame是一种表格型数据,含有一组有序的列,既有行索引也有列索引
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
example_2

Output
output1.4.1.2

1.4.2 查看 DataFrame数据的每列的名称和值

df.columns  # 查看列的名称
df['Cabin']  # 查看 "Cabin" 列的所有值
df.Cabin  # 查看 "Cabin" 列的所有值

1.4.3 DataFrame 的列删除和隐藏

# 列删除
del df['a']
df.drop(['PassengerId', 'Name', 'Age'], axis = 1, inplace = True)
# 列隐藏
df.drop(['PassengerId', 'Name', 'Age'], axis = 1)

🚩 1.5 数据筛选

1.5.1 筛选列数据

  • 以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
df[df['Age'] < 10].head()
  • 以"Age"为筛选条件,显示年龄在10岁以下的乘客名字
df[df['Age'] < 10]['Name']
  • 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage = df[(df['Age'] > 10) & (df['Age'] < 50)]
  • 将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
    ❗ 数据清洗时需要将带空值的行删除,此时数据不再是连续的缩影,我们需要首先使用 reset_index() 重置列
    💡 reset_index() 将原来的索引index作为新的一列 drop=True 去掉原索引
    😀 inplace=True:不创建新的对象,直接对原始对象进行修改;
    😄 inplace=False:对数据进行修改,创建并返回新的对象承载其修改结果。
# 删除空值并重置列
midage = midage.reset_index(drop = True)
# 选取特定行和列
midage.loc[100, ['Pclass', 'Sex']]  # 输出为Series
midage.loc[[100],['Pclass','Sex']]  # 输出为DataFrame
  • 将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.loc[[100, 105, 108],['Pclass', 'Name', 'Sex']]
midage.iloc[[100,105,108],[2,3,4]]

✔️ loc 寻找索引中的标签
✔️ iloc 寻找索引中的位置

# 查找第一列数据
midage.iloc[:, 0]
# 寻找坐标在 (2, 3) 的数据
midage.iloc[2, 3]

🚩 1.6 了解数据

1.6.1 数据排序

  • 行 / 列索引排序
# 示例数据
frame = pd.DataFrame(np.arange(8).reshape((2, 4)), index = [2, 1], columns = ['d', 'a', 'b', 'c'])

#排序
frame.sort_index()  # 行索引升序
frame.sort_index(axis = 1)  # 列索引升序
frame.sort_index(axis = 1, ascending = False)  # 列索引降序
# 选取一列进行升序排序
frame.sort_values(by='c', ascending=True)
# 任选两列数据同时降序排序
frame.sort_values(by=['a', 'c'], ascending=False)

1.6.2 DataFrame数据相加

# 示例数据
frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
                     columns=['a', 'b', 'c'],
                     index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
                     columns=['a', 'e', 'c'],
                     index=['first', 'one', 'two', 'second'])

# 数据合并
pd.concat([frame1_a, frame1_b], axis = 0)

# 数据相加
new_frame = frame1_a + frame1_b

⚠️两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。

1.6.3 查看数据基本信息

new_frame.describe()

#count : 样本数据大小
#mean : 样本数据的平均值
#std : 样本数据的标准差
#min : 样本数据的最小值
#25% : 样本数据25%的时候的值
#50% : 样本数据50%的时候的值
#75% : 样本数据75%的时候的值
#max : 样本数据的最大值
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值