panda 第二节(常用操作)

# -*- coding:utf-8 -*-
import pandas as pd
import numpy as np

# DataFrame初始化 numpy.ndarray
df = pd.DataFrame(np.arange(12).reshape(3, 4), columns=["col" + str(i) for i in range(4)], index=list("ABC"))
print(df)
# DataFrame初始化 字典 ,值个数必须一致,其中键做为列名
dic = {"name": ["xiaoming", "xiaohong"], "age": [18, 20], "sex": ["M", "F"]}
df = pd.DataFrame(dic)
print(df)

# DataFrame初始化 列表,缺省值为NaN,列名为字典key
dic = [{"name": "xiaoming", "age": 18, "sex": "F"}, {"name": "xiaohong", "age": 20}]
df = pd.DataFrame(dic)
print(df)
print(df.index)  # RangeIndex(start=0, stop=2, step=1)
print(df.columns)  # Index(['name', 'age', 'sex'], dtype='object')
print(df.values)
print(df.dtypes)  # name    object / age      int64 /sex     object
print(df.shape)  # (2, 3)
print(type(df.values))  # <class 'numpy.ndarray'>
print(df.ndim)  # 表示维度 2
print(df.head())  # 默认前5行
print(df.tail())  # 默认后5行
print("*" * 50)
print(df.info())  # 相关信息概述
print(df.describe())  # 计算数字类型的字段的指标
# 排序
df = df.sort_values(by="age", ascending=False)
print(df)

''' 
df = pd.read_csv("test.csv")
print(type(df))  # <class 'pandas.core.frame.DataFrame'>
print(df)
'''
# DataFrame 切片
df = pd.DataFrame(np.random.randint(10, 100, (6, 6)))
df.columns = ["col" + str(i) for i in range(6)]
print(df)
print(df["col1"])  # 取列 pandas.core.series.Series
print(df[:3])  # 取行  pandas.core.frame.DataFrame
# 同时取行取列
print(df[:3][["col1", "col2"]])
print("*" * 50)
# loc 通过标签索引获取数据
print(df.loc[0, "col1"])
print(df.loc[[0, 2], ["col1", "col3"]])
print(df.loc[0:2, ["col1", "col3"]])  # 注意:行中冒号后面的也是能选到的,前闭后闭

# iloc 通过位置坐标获取数据
print(df.iloc[1, 1])
print(df.iloc[1:3, 2:3])  # 注意:行中冒号后面的不能选到的,前闭后开

# 数据过滤
print(df[df["col1"] > 50])  # 布尔索引 返回满足条件的行列数据
df[(df["col1"] > 50) & (df["col1"] < 80)]  # 多条件用括号,&链接
# 转换成字符串
df.iloc[:, 1] = "a/b/c"
df["col1"].str.split("/")
# NaN处理
df.iloc[3, 4] = np.nan
pd.isnull(df)
print(df[pd.notnull(df["col4"])])  # col4中不为NaN的数据

df.dropna(axis=0, how="any")  # 删除存在有NaN的行
df.dropna(axis=0, how="all")  # 删除存整行都是NaN的行
df.fillna(100)  # 替换NaN为100
df.fillna(df.mean())  # 替换NaN为当前列的平均值


df.iloc[3,:][df.iloc[3,:]==94]=100

 

<think>嗯,用户想了解Pandas的基本操作,特别是常用的数据处理方法和示例。首先,我需要回忆一下Pandas的核心功能,比如数据读取、清洗、筛选、转换、聚合和可视化等。根据用户提供的引用,其中提到了读取CSV文件、数据清洗、agg方法的使用以及数据可视化等内容。 用户可能刚接触Pandas,所以应该从最基础的步骤开始。比如,如何导入库和读取数据,这是数据处理的第一步。引用[4]中提到了用pd.read_csv读取文件,这个肯定要包括进去。然后,数据清洗部分,处理缺失值、重复值,还有数据类型转换,这些都是常见的问题,需要详细说明。 接下来是数据筛选和切片,用户可能想知道如何选择特定的行或列,比如使用loc和iloc,或者条件筛选。这部分需要给出具体的例子,比如筛选年龄大于30的数据,这样用户更容易理解。 数据转换和处理部分,包括创建新列、应用函数,比如使用apply方法。例如,将工资转换为万元单位,这样的例子比较直观。还有日期处理,比如转换日期格式,提取年月日,这也是常用操作。 聚合数据部分,引用[3]提到了agg方法,可以结合groupby来分组聚合,比如按部门计算平均工资和最大年龄,这样的示例能展示agg的用法。另外,数据合并如concat和merge也是常用的,特别是合并多个DataFrame的时候。 数据可视化部分,虽然Pandas本身基于Matplotlib,但直接调用plot方法可以快速生成图表,比如折线图或柱状图,用户可能需要简单的可视化步骤,所以需要提到如何用Pandas进行绘图。 最后,导出数据到CSV或Excel也是数据处理的重要步骤,应该给出示例代码。此外,用户提供的引用[2]里也提到了数据处理的整个流程,从读取到导出,所以需要确保覆盖这些环节。 在思考过程中,还要注意用户可能的深层需求,比如处理大数据时的性能问题,或者更复杂的操作,但根据问题描述,用户主要关注基本操作,所以保持示例简单易懂是关键。同时,确保每个步骤都有代码示例,并解释每行代码的作用,帮助用户逐步掌握。 另外,需要检查是否有遗漏的常用操作,比如处理文本数据、分箱操作或数据透视表,但根据引用内容,可能暂时不需要深入这些高级功能。保持回答结构清晰,分点说明,每个部分用小标题,代码用代码块展示,符合用户要求的格式。 最后生成相关问题的时候,要围绕Pandas的基本操作展开,比如数据清洗的具体方法、如何合并数据、处理时间序列等,这样用户可以有进一步学习的路径。确保引用标识正确添加到对应的位置,比如在数据读取部分引用[4],在agg方法引用[3]等。</think># Pandas数据处理常用操作及示例 ## 一、数据读取与基础操作 1. **文件读取** 使用`pd.read_csv()`读取CSV文件是常见操作: ```python import pandas as pd data = pd.read_csv('data.csv') # 引用[4] ``` 2. **数据预览** ```python print(data.head(5)) # 显示前5行 print(data.describe()) # 统计描述 ``` ## 二、数据清洗 1. **处理缺失值** ```python data.dropna() # 删除含缺失值的行 data.fillna(0) # 用0填充缺失值 ``` 2. **处理重复值** ```python data.drop_duplicates() # 删除重复行 ``` 3. **数据类型转换** ```python data['日期列'] = pd.to_datetime(data['日期列']) # 转换为日期格式 ``` ## 三、数据筛选与切片 1. **条件筛选** ```python df_filtered = data[data['年龄'] > 30] # 筛选年龄>30的记录 ``` 2. **列选择** ```python selected_columns = data[['姓名', '工资']] # 选择特定列 ``` 3. **位置索引** ```python row_3 = data.iloc[2] # 获取第3行数据 ``` ## 四、数据转换与处理 1. **创建新列** ```python data['工资()'] = data['工资'] / 10000 # 单位转换 ``` 2. **应用函数** ```python data['姓名大写'] = data['姓名'].apply(lambda x: x.upper()) ``` 3. **日期处理** ```python data['年份'] = data['日期列'].dt.year # 提取年份 ``` ## 五、数据聚合与合并 1. **分组聚合** 使用`groupby`和`agg`进行数据汇总: ```python grouped = data.groupby('部门').agg({'工资':'mean', '年龄':'max'}) # 引用[3] ``` 2. **数据合并** ```python merged_data = pd.concat([df1, df2]) # 纵向合并 joined_data = pd.merge(df_a, df_b, on='ID') # 横向连接 ``` ## 六、数据可视化 ```python data['销售额'].plot(kind='line') # 生成折线图 data['部门'].value_counts().plot(kind='bar') # 生成柱状图 ``` ## 七、数据导出 ```python data.to_csv('processed_data.csv', index=False) # 导出CSV data.to_excel('output.xlsx') # 导出Excel ``` [^1]: 数据清洗是确保分析结果准确性的关键步骤 [^2]: 可视化功能基于Matplotlib实现,需提前安装该库 [^3]: agg方法支持同时计算多个统计量 [^4]: 读取数据时注意文件编码格式参数`encoding`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值