标签:总结 index None df data 索引 csv Numpy pandas
目录
十.pandas方法总结
1.索引切片
2.数据排序
3.数据统计
Pandas数据计算
4.数据查看
5.数据清洗
6-数据分组
查看分组结果
7-处理第三方数据
csv文件操作
Excel文件操作
Excel文件读取read_excel
Excel文件写入 to_excel()
SQL操作
mysql读取
数据保存
pandas处理字符串
数据操作
1-数据添加&插入
2-数据删除
3-重置索引&重命名标签&设置索引列
4-对象拼接
常用属性和方法汇总
numpy操作总结
1-创建ndarray对象:
2-方法总结
十.pandas方法总结
1.索引切片
| |
---|
slice(2, 9, 3) | #从索引2开始到索引9停止,步长为2 |
arr_data[2:9:2] | 通过冒号来分割切片参数. |
arr_data[1:] | 从[1:]索引处开始切割 |
arr_num[1, ...] | 返回数组的第二行 |
arr_data[[0, 1, 2], [0, 1, 0]] | [0,1,2]代表行索引;[0,1,0]代表列索引 |
# 行索引 width_data = np.array([[0, 0], [3, 3]]) # 列索引 height_data = np.array([[0, 2], [0, 2]]) new_data = arr_data[width_data, height_data] | 获取了 4*3 数组中的四个角上元素,它们对应的行索引是 [0,0] 和 [3,3],列索引是 [0,2] 和 [0,2]。 |
arr_num[1:4, [1, 2]] | 行使用基础索引,对列使用高级索引. |
print(arr_data[arr_data > 6]) | 返回结果大于六的数字数组 |
# np.isnan(x) 可以判断x是否为空值 print(arr_data[~np.isnan(arr_data)]) | np.nan是一个float类型的数据,表示不是一个数字 |
| |
---|
df_data["语文"] | 选取指定的列. |
df_data.loc["张三"] | 选取指定的行. |
df_data.loc[["张三","王五","坤哥"],["语文","数学","地理"]] | 选取指定的行和列. |
df_data.loc["张三","语文"] | 选取值. |
df.iloc[2] .iloc[1:3, 1:4] | iloc函数只能通过整数索引取值. |
| |
df_data = pd.DataFrame(
np.random.randint(65,95,size=(5,6)),
index=["张三","李四","王五","赵六","坤哥"],
columns=["语文","数学","英语","政治","历史","地理"]
)
df_data
# 选取指定的列
df_data["语文"]
# 选取指定的行
df_data.loc["张三"]
# 选取指定的行和列
df_data.loc[["张三","王五","坤哥"],["语文","数学","地理"]]
# 选取值
df_data.loc["张三","语文"]
df.columns #返回列表,列标签.
# 整体修改,上面复制过来直接进行修改
# df.columns = ['颜色', '姓名', 'num_critic_for_reviews', 'duration',
# 'director_facebook_likes', 'actor_3_facebook_likes', 'actor_2_name',
# 'actor_1_facebook_likes', 'gross', 'genres', 'actor_1_name',
# 'movie_title', 'num_voted_users', 'cast_total_facebook_likes',
# 'actor_3_name', 'facenumber_in_poster', 'plot_keywords',
# 'movie_imdb_link', 'num_user_for_reviews', 'language', 'country',
# 'content_rating', 'budget', 'title_year', 'actor_2_facebook_likes',
# 'imdb_score', 'aspect_ratio', 'movie_facebook_likes']
# print(df.head())
#
-----------------------------------
# 转化为列表之后修改
my_columns = list(df.columns)
my_columns[0] = "颜色色"
df.columns = my_columns
print(df.head())
2.数据排序
| |
---|
df.sort_index(ascending=True) | 按index排序. 默认升序,ascending=False降序 |
df.sort_index(axis=1) | 列标签排序 |
df.sort_values(by='col2', kind="mergesort") | 按值排序. 与标签排序类似,sort_values() 表示按值排序。它接受一个by 参数,该参数值是要排序数列的 DataFrame 列名 sort_values() 提供了参数kind |
| |
df_data = pd.DataFrame(
np.random.randint(65,95,size=(5,6)),
index=[1,4,6,2,3],
columns=["语文","数学","英语","政治","历史","地理"]
)
# 默认升序,ascending=False降序
# 根据标签进行排序
df_data.sort_index()
# 根据某一列值进行排序
df_data.sort_values(by="语文",ascending=False)
3.数据统计
Pandas数据计算
函数名称 | 描述说明 |
---|
count() | 统计某个非空值的数量。 |
sum() | 求和 |
mean() | 求均值 |
median() | 求中位数 |
mode() | 求众数 |
std() | 求标准差 |
min() | 求最小值 |
max() | 求最大值 |
abs() | 求绝对值 |
describe() | 计算基本统计信息,如均值、标准差、最小值、最大值等。 |
在 DataFrame 中,使用聚合类方法时需要指定轴(axis)参数。下面介绍两种传参方式:
df_data = pd.DataFrame(
np.random.randint(65,95,size=(5,6)),
index=[1,4,6,2,3],
columns=["语文","数学","英语","政治","历史","地理"]
)
# 计算基本统计信息,如均值、标准差、最小值、最大值等。
df_data.describe()
# 计算每列的平均值。
df_data.mean()
# 计算每列的中位数。
df_data.median()
# 计算每列非缺失值的数量。
df_data.count()
4.数据查看
函数 | 说明 |
---|
df.head(n) | 显示前 n 行数据; |
df.tail(n) | 显示后 n 行数据; |
df.info() | 显示数据的信息,包括列名、数据类型、缺失值等; |
df.describe() | 显示数据的基本统计信息,包括均值、方差、最大值、最小值等; |
df.shape | 显示数据的行数和列数。 |
query(" ") | # 按条件筛选 # df_data.query("(A>10) and (B>12)") # 筛选指定列 # df_data.query("(A>10) & (B>12)")[["demo","C","D"]] # 筛选某一列 # df_data[df_data["demo"] == "python"] # df_data.query('demo == "python"') |
isin() | 返回bool类型.xxx.xxx.isin() |
apply() | df_data.apply(lambda x:x.sum()-x.max(),axis="index") |
df_data.info() | 显示df_data的基础信息 |
5.数据清洗
函数 | 说明 |
---|
df.dropna() | 删除包含缺失值的行或列; DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False) |
df.fillna(value) | 将缺失值替换为指定的值; |
df.replace(old_value, new_value) | 将指定值替换为新值; |
df.duplicated() | 检查是否有重复的数据; |
df.drop_duplicates() | 删除重复的数据。 |
isnull() | 检测某一列是否为空值. |
miss_value = ['--',18] data = pd.read_csv('student.csv',na_values=miss_value) | 自定义空值类型. |
pd.to_datetime() | 自动修改日期格式. |
6-数据分组
df_data.groupby("company").agg("mean")
#可结合数据计算一起使用
df_data.groupby("year")[["GDP", "year"]].mean()
df_data.groupby("country").agg({"GDP":"mean","year":"median"})
df_data.groupby("country")[["GDP", "year"]].agg(["mean","std"])
df_data.groupby(["year", "country"])[["GDP", "year"]].mean()
# 统计个数去重
df_data.groupby("year")[["country"]].nunique()
# 统计出现的国家数
df_data["country"].nunique()
# 统计出现的国家
df_data["country"].unique()
查看分组结果
通过调用groups
属性查看分组结果.
print(df_data.groupby('year').groups)
#{1990: [2, 4], 1992: [0, 7], 1994: [8], 1995: [5], 1997: [3], 1998: [1, 6, 9]}
7-处理第三方数据
csv文件操作
| |
---|
read_csv() | |
read_json() | |
pd.read_csv("./number_data/student.csv", encoding="utf-8") | file=r'E:/././student.csv' data=pd.read_csv(file,encoding='utf-8') |
index_col | 在 CSV 文件中指定了一个列,然后使用index_col 可以实现自定义索引。 pd.read_csv("./number_data/student.csv", encoding="utf-8", index_col=["Name"]) |
df.dtypes | 查看原先的数据类型. |
pd.read_csv("./number_data/student.csv", encoding="utf-8", dtype={'Salary': np.float64}) | 转换salary为float类型(字典形式) |
names 参数 | 更改文件标头名(列的标签) pd.read_csv("./number_data/student.csv", encoding="utf-8", names=["a","b","c","d","e"]) --加上header=0参数,就会删除原有的标头名. |
skiprows参数 | 表示跳过指定的行数。 (跳过前几行!!!) skiprows=1 |
to_csv() | data = {'Name': ['Smith', 'Parker'], 'ID': [101, 102], 'Language': ['Python', 'JavaScript']} info = pd.DataFrame(data) csv_data = info.to_csv("./number_data/student.csv") |
Excel文件操作
Excel文件读取read_excel
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None,
usecols=None, squeeze=False,dtype=None, engine=None,
converters=None, true_values=None, false_values=None,
skiprows=None, nrows=None, na_values=None, parse_dates=False,
date_parser=None, thousands=None, comment=None, skipfooter=0,
convert_float=True, **kwds)
参数名称 | 说明 |
---|
io | 表示 Excel 文件的存储路径。 |
sheet_name | 要读取的工作表名称。 |
header | 指定作为列名的行,默认0,即取第一行的值为列名;若数据不包含列名,则设定 header = None。若将其设置 为 header=2,则表示将前两行作为多重索引。 |
names | 一般适用于Excel缺少列名,或者需要重新定义列名的情况;names的长度必须等于Excel表格列的长度,否则会报错。 |
index_col | 用做行索引的列,可以是工作表的列名称,如 index_col = '列名',也可以是整数或者列表。 |
usecols | int或list类型,默认为None,表示需要读取所有列。 |
squeeze | boolean,默认为False,如果解析的数据只包含一列,则返回一个Series。 |
converters | 规定每一列的数据类型。 |
skiprows | 接受一个列表,表示跳过指定行数的数据,从头部第一行开始。 |
nrows | 需要读取的行数。 |
skipfooter | 接受一个列表,省略指定行数的数据,从尾部最后一行开始。 |
Excel文件写入 to_excel()
# 创建DataFrame数据
data = pd.DataFrame({'name': ['张三', '李四', '王五', '赵六'],
'rank': [1, 2, 3, 4],
'language': ['PHP', 'C', 'PHP', 'Python'],
'url': ['www.zhangsan.com', 'c.lisi.net', 'www.wangwu.com', 'www.zhaoliu.com']})
# 创建ExcelWrite对象
writer = pd.ExcelWriter('datas.xlsx')
data.to_excel(writer)
writer.save()
SQL操作
index_col 属性 | 充当行标签 data = pd.read_sql(sql_one, con=coon,index_col="house_five") |
---|
将数据写入Excel | #创建ExcelWrite对象. writer = pd.ExcelWriter('website.xlsx') data.to_excel(writer) writer.save() |
| |
mysql读取
import pandas as pd
import pymysql
coon = pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
password=" ",
db="库名"
)
sql_one = "select * from house"
print(pd.read_sql(sql_one,con=coon))
sql_two = "select * from house where id > 10"
print(pd.read_sql(sql_two, con=coon))
数据保存
df.iloc[:3, :].to_csv("./movie_new.csv")
df.iloc[:3, :].to_excel("./movie_new.xlsx",sheet_name="xxx")
pandas处理字符串
函数名称 | 函数功能和描述 |
---|
lower() | 将的字符串转换为小写。 |
upper() | 将的字符串转换为大写。 |
len() | 得出字符串的长度。 |
strip() | 去除字符串两边的空格(包含换行符)。 |
split() | 用指定的分割符分割字符串。 |
cat(sep="") | 用给定的分隔符连接字符串元素。 |
contains(pattern) | 如果空子字串包含在元素中,则为每个元素返回一个布尔值 True,否则为 False。 |
replace(a,b) | 将值 a 替换为值 b。 |
count(pattern) | 返回每个字符串元素出现的次数。 |
findall(pattern) | 以列表的形式返出现的字符串。 |
isnumeric() | 返回布尔值,检查 Series 中组成每个字符串的所有字符是否都为数字。 |
repeat(value) | 以指定的次数重复每个元素。 |
find(pattern) | 返回字符串第一次出现的索引位置. |
数据操作
1-数据添加&插入
| |
---|
df[]=value | 插入到最后面.# 添加列(存在进行修改,不存在进行添加.) |
insert() df.insert(1, column='score', value=[91, 90, 75]) | 第一个参数为插入列的位置;(插入到前面) |
append() | 将新的数据行添加到 DataFrame 中,该函数会在行末追加数据行. |
df.insert(0, "new_money", value=df["gross"] - df["budget"]) | #在指定的位置进行添加. |
| |
2-数据删除
| |
---|
del del xxx['column'] | 删除 DataFrame 中的数据列 |
pop() | 删除 DataFrame 中的数据列 |
drop('标签') | 删除一行.使用行索引标签,从 DataFrame 中删除某一行数据。如果索引标签存在重复,那么它们将被一起删除. |
df.drop(2, axis=0).head() df.drop("color",axis="columns").head() | # 删除索引行 # 删除具体列 |
3-重置索引&重命名标签&设置索引列
| |
---|
df_new = df.reindex(index=[0, 2, 5], columns=['Time', 'Name', 'Age']) | 只获取0 2 5行,Time,Name,Age列 |
rename() df.rename(columns={'Name': '姓名', 'Age': '年龄', "height": "身高"}, index={0: 'first', 1: 'second', 2: 'third'}) | 对行和列重新命名. |
df_data.set_index(keys='Name') | 设置索引列 keys : 要设置为索引的列名(如有多个应放在一个列表里) (列值-->列标签) drop : 将设置为索引的列删除,默认为True 保留当前列+(列值-->列标签) append : 是否将新的索引追加到原索引后(即是否保留原索引),默认为False inplace : 是否在原DataFrame上修改,默认为False |
4-对象拼接
| |
---|
concat() pd.concat([df_one,df_two]) | 如果想让输出的 行索引 遵循依次递增的规则,那么需要将 ignore_index 设置为 True pd.concat([df_one,df_two],axis="index",ignore_index=True) |
append() | a.append(b) 单独链接一个Dataframe对象 a.append([b,c]) 连接多个Dataframe对象 |
| |
常用属性和方法汇总
DataFrame 的属性和方法,与 Series 相差无几.
名称 | 属性&方法描述 |
---|
T | 行和列转置。 |
axes | 返回一个仅以行轴标签和列轴标签为成员的列表。 |
dtypes | 返回每列数据的数据类型。 |
empty | DataFrame中没有数据或者任意坐标轴的长度为0,则返回True。 |
ndim | 轴的数量,也指数组的维数。 |
shape | 返回一个元组,表示了 DataFrame 维度。 |
size | DataFrame中的元素数量。 |
values | 使用 numpy 数组表示 DataFrame 中的元素值。 |
head() | 返回前 n 行数据。 |
tail() | 返回后 n 行数据。 |
numpy操作总结
1-创建ndarray对象:
numpy.array(object, dtype=None, copy=True, order=None,ndmin=0)
序号 | 参数 | 描述说明 |
---|
1 | object | 表示一个数组序列。 |
2 | dtype | 可选参数,通过它可以更改数组的数据类型。 |
3 | copy | 可选参数,表示数组能否被复制,默认是 True。 |
4 | order | 以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认)。 |
5 | ndmin | 用于指定数组的维度。/也可查看(.ndium) |
2-方法总结
函数 | |
---|
numpy_data.reshape() | reshape(4, 3) 可以改变多维数组行数和列数,从而达到数组变维的目的 |
numpy.arange(start, stop, step, dtype) | 创建给定数值范围的数组. |
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) | 返回均匀间隔的一维等差数组,默认均分 50 份. |
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None) | 返回一个 ndarray 数组,它用于创建等比数组. |
np.random.randint(low=5,high=10,size=(30,8)) | |
标签:总结,
index,
None,
df,
data,
索引,
csv,
Numpy,
pandas
From: https://blog.csdn.net/2303_80857229/article/details/136913809