数据处理:
主要利用的库
import numpy as np
import pandas as pd
函数的使用:
1.读取:
path = "路径"
c = pd.read_csv(path,sep="")参数sep是数据的分割符号,如果不输入在读取csv文件中将默认为“,”
返回的内容是属于pandas库的特殊数据类型DataFrame。
在读取过程中,该函数会根据给出的数据自行判断数据类型,如果导入的数据类型并不是希望的数据类型,可以通过下面这个函数规定。如下,将column_name这一列的数据规定为int64型
df = pd.read_csv('example.csv', dtype={'column_name': 'int64'})
如果文件没有列名,我们也可以通过先构建一个
names列表储存列名利用read中的names参数来添加列名。
df.rename(columns={'A': 'X', 'B': 'Y'})
其中字典的key值为原列名,value为修改后的列名。
df = pd.read_csv('example.csv',names=names)# 前一个names是参数名,后一个是具体参数。
需要特别注意的是,如果数据本身有列名,本身的列名会被挤去第二行,另外。names中的列名,会与实际的列名右对齐,也就是说,如果数据的列数大于names中名字的个数,左侧的几列数据会出现没有添加列名的情况。
df2 = pd.read_table('df.csv',sep=',')# 与read_csv类似,不同的是,他的读取对象的分隔符号默认为空格,csv的默认分隔符号位','当然,我们也可以用sep参数调整分隔符号。
2.观察数据
df 为已经读取的数据
df.info() 查看的数据为其中每列的数据类型,以及数据中的非空缺的数值数目。
# 输出内容为数据的列名,每列数据的数量,数据类型# 不需要print也能够输出相应信息。
df.describe() # 输出的内容为每列的
count: 非NA/非空值的数量。
mean: 平均值(均值)。
std: 标准差(标准偏差)。
min: 最小值。
25%: 第一四分位数(Q1),即数据集中最小的25%的数据的最大值。
50%: 中位数(第二四分位数,Q2)。
75%: 第三四分位数(Q3),即数据集中最大的25%的数据的最小值。
max: 最大值。
# 如果要提取这些数字我们可以 a = df[列名].max()/mean()/std()
df.columns表示为df数据的列名 # 在处理数据时我们也可以通过
# df.columns = names # 来将列名替换成names中的数据,此时names中的列名量必须等于df中的列数。
df.head(3) # 显示前三行,显示的比较全面。
df.tail(3) # 显示后三行
指定观察用iloc或者loc:两者的序号并不是index的序号数,而是该数据的行数。
# iloc : 利用列的序号锁定列
# 获取第一行的数据
row1 = df.iloc[0]
print(row1)
# 获取第二列的数据
col2 = df.iloc[:, 1]
print(col2)
# 获取第二行第二列的单个值
value = df.iloc[1, 1]
print(value)
# 获取多个行和多个列的数据
selected = df.iloc[[0, 2], [0, 2]]
print(selected)
# loc,利用列名锁定列,行名
row1 = df.loc[1]
print(row1)
# 获取第二列的数据
col2 = df.loc[:, 'B']
print(col2)
# 获取第二行第二列的单个值
value = df.loc[2, 'B']
print(value)
# 获取多个行和多个列的数据
selected = df.loc[[1, 2], ['A', 'C']]
print(selected)
#####!!!!!重点:利用matplotlib获取信息
import matplotlib.pyplot as plt
bins = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] # 定义分段的边界
labels = ['0-10', '11-20', '21-30', '31-40','51-60','61-70','71-80','81-90','91-100'] # 定义分段的标签
df1['age_group'] = pd.cut(df1['年龄'], bins=bins, labels=labels, right=False)
age_counts = df1['age_group'].value_counts().sort_index() # 利用参数设置
age_counts.plot(kind='bar', color='skyblue') # 画图
plt.title('Segmented age distribution') # 用中文可能显示不了
plt.xlabel('Age bands')
plt.ylabel('Number')
plt.show() # 显示图形
以柱形图的外貌显现,可以看出大体的年龄分布。
3.数据清洗:
# 在观察数据之后,我们要清洗的内容包括缺失值,异常值。重复值
处理缺失值的方法:我们可以将缺失值设定为一个不在数据中存在存在的数值,比如0,-1,也可以设置成bool型的False。
对于异常值,我们可以根据常识挑选出这些异常值,比如说挑选挑选出网龄大于200岁的数据,或者年龄为负数的人。异常值的处理方式,如果即便删除异常值所在行对最后结果产生影响不大的情况下,我们可以删除异常值所在的一整行数据,比如你有几万个数据,其中的异常值只有一二十,那根据情况,我们可以选择直接删除这一行数据。-->这么做就是直接抹去存在异常值的数据。在对最终结果影响不大的前提下,我们可以通过用正常值的平均值或者中位数来代替这个位置的数据 --> 如果这样处理的话,程序的分析内容将减小异常值的影响,从而在这一行分析除了异常意外列的数据对结果的影响。
处理重复值
df.drop.duplicates("列名",keep="first")# 保留重复的第一个
a = df[df[列名] > 100]
此时a即为在df某一列中满足该列数字大于100的所有的行,前提:此处的数据类型应为确切的整形。
df[列名].isnull() 将返回该列名下数据为0的那一整行
利用isnull可以区分出缺失值
4.数据处理
df = df.frop_duplicates(["x",'y'])# 找出xy两列的组合方式
df.groupby(['x','y'])
df['体力'] = df['体力'].apply(lambda x:"high" if int(x) > 100 else 'low' if int(x) < 50 else 'mid')集体调整数字
# 替换列名的方法
1.替换
(1)
columnses = {
'旧列名1' : 'new1',
'old2' : 'new2'
}
df = pd.read_csv("df.csv")
df.rename(columns=colmuns, inplace=True)
(2)
df.column = columnses
2.在引入数据时替换:
names = ['new1','new2']
df = pd.read_csv('example.csv',names=names,header=None)
# header表明,不引入第一行,在这里的第一行就是列名
5数据整理:
df = df.sort_values(by='列名',ascending=False).reset_index(drop=True) # ascending=False: 表示降序排序。如果设置为True,则表示升序排序。
# reset_index(drop=True)的 作用是使序号重新排列,如果不进行这一步,iloc或者loc过程中较难找到相应的序号。
# reset_index(): 会重置数据框的索引。默认情况下,重置索引会将旧索引添加为数据框的一个列。
# drop=True: 表示在重置索引时,不将旧索引添加为数据框的一个列。这样可以避免数据框中出现重复的索引列。
df = df.sert_index(ascending=False) 按照序号排序
df = df.sort_values(by=['列名1','列名2'],ascending=[False,True]).reset_index(drop=True)# ascending参数可以只写一个,也可以每个都写,先排序列名1如果列名1相同,则在列名1相同的数据中排列列名2.
未完待续!
标签:df,列名,print,names,数据处理,csv,数据 From: https://www.cnblogs.com/zonghongqi/p/18315039