本文基于Datawhale提供泰坦尼克号数据分析问题实例,对于程序解释均在代码后的注释中。
均为本人理解,如有不足或错误地方欢迎补充批评指正,如有侵权,联系速删。
数据的读取修改及存储
import pandas as pd
import numpy as np
df = pd.read_csv('train.csv')
# 读取train.csv文件,相对路径,当该文件处于该程序文件中可以使用
df.head(3) # 读取前三行数据
df = pd.read_csv('E:/pythonProject2/train.csv')
# 绝对路径,可以让程序直接寻找在其文件外的目标文件
df.head(3)
chunker = pd.read_csv('train.csv', chunksize=1000)
# 将读取目标文件每一千个行为划分一个模块,按模块提取
df = pd.read_csv('train.csv',
names=['乘客ID', '是否幸存', '仓位等级', '姓名', '性别', '年龄', '兄弟姐妹个数', '父母子女个数', '船票信息', '票价', '客舱', '登船港口'],
index_col='乘客ID', header=0)
# 读取目标文件,将表头依次修改,将索引修改
# names:指定每一列的名称,如果文件中不包含header的行,应显性表示header=None。
# index_col:索引,默认None用列名作为目标文件的行标签,若给出序列则用Multilndex(复合索引)。
# header=0:替代原始列名
df.head() # 读取目标文件的所有行
df.head(10)
df.tail(15)
# 观察表格前10行的数据和后15行的数据 可直接将其写入print()观察输出
df.isnull().head()
# 判断数据是否为空,为空的地方返回True,其余地方返回False 可直接将其写入print()观察输出
df.to_csv('train_chinese.csv')
# 将你加载并做出改变的数据,在工作目录下保存为一个新文件
建立简单的Series和DataFrame的表格,并筛选数据
import numpy as np
import pandas as pd
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
# 标题列向排列,横向表格
# print(example_1)
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)
# 标题横向排列,列向表格
# print(example_2)
df = pd.read_csv('E:/pythonProject1/train.csv') # 读取文件
df.head(3)
df.columns # 查看DataFrame数据的每列的名称
df['Cabin'].head() # 查看"Cabin"这列的所有值
df.Cabin.head() # 查看"Cabin"这列的所有值
# 删除 为保证下列程序正常运行,故设为备注
# test_1 = pd.read_csv('test_1.csv')
# test_1.head(3)
# del test_1['a'] # 'a'为要删除的列名
# test_1.head(3) # 删除多余的列
# 筛选逻辑
df[df["Age"] < 10].head(3) # 输出满足条件的列表
a = df[(df["Age"] > 10) & (df["Age"] < 50)] # 将满足条件的表格信息的数据命名为a
a.head(3) # 输出
a = a.reset_index(drop=True)
a.head(3)
print(a.loc[[100], ['Pclass', 'Sex']])
print(a.loc[[100, 105, 108], ['Pclass', 'Name', 'Sex']])
# 使用loc方法将a的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
print(a.iloc[[100, 105, 108], [2, 3, 4]])
# 使用iloc方法将a的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
# 在iloc中列用数字的方式表达,而loc中为列的名称表达
实现简单的排序
import numpy as np
import pandas as pd
text = pd.read_csv('train_chinese.csv') # 相对路径
text.head() # 所有数据
frame = pd.DataFrame(np.arange(8).reshape((2, 4)),
index=['2', '1'],
columns=['d', 'a', 'b', 'c'])
# 生产一个形状为2—4的巨星数组,index:命名行名称,columns:命名列名称
print(frame)
frame.sort_values(by='c', ascending=False)
# 按列升序排列 可在末尾加.head()来确定操作范围
frame.sort_index()
# 让行索引升序排序
frame.sort_index(axis=1)
# 让列索引升序排序
frame.sort_index(axis=1, ascending=False)
# 让列索引降序排序
frame.sort_values(by=['a', 'c'])
# 让任选两列数据同时降序排序
# 矩阵运算
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'])
print(frame1_a+frame1_b)
# 两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。