dataframe常用操作总结

初始化

可以使用array+columns的格式,

d=pd.DataFrame(np.arange(10).reshape(2,5))
df1 = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['name','gender','age'])

也可以使用字典+大括号的格式:

df = pd.DataFrame({'a': [1, 2] * 3,
...                    'b': [True, False] * 3,
...                    'c': [1.0, 2.0] * 3})

读csv文件

使用pandas读取csv文件;iloc查看并且修改指定位置的数值,但是不会改变原始的csv文件,重新读取,打印出来还是之前的数据。

csv文件可能有空值,有可能空值全部处于一部分,比如说文件前18行都是2列,但是之后18行是8列,这时读取文件就会报错,提示在18行到19行的地方expected 2 fileds pandas,解决方法是在read_csv参数中加入error_bad_lines=False,这样强制使其不会报错,但是结果是只读取到了前18行

可以先把之前的删除,再使用to_csv写入用来的路径

保存csv文件

保存时默认连同行列名也保存下来,可以使用header=False,index=False去除。如果连同行列名字保存下来,结果就是保存的csv文件会多出行列数。这时候再使用read_csv读取,并且header=0,使用第一行名作索引,就会在最左上角的地方出现Unnamed。这时候再保存,再读取,并且使用fscanf保存到数组中,就会出现全0的情况。

在read_csv时也有header,index_col.它们取0时是取第一行/列作为 索引。header=None和index_col=False等同,分别是对行列操作。

问题来了,如果header=0,选择第一行作为索引,那如果第一行有重复数字怎么办呢,可能导致几个列名是重复的。pandas的解决办法是对重复出现的数字增加小数点的部分进行编号。2222,就会编码为2.1,2.3,2.3,2.4作为索引。

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
c = ['a', 'b', 'c']
r = ['A', 'B', 'C']
df = pd.DataFrame(data=data,  columns=c, index=r)

excel文件可以另存为csv格式,但是貌似会导致新生成的csv文件行数特别多,很多行是nan

切片

对列作切片。df["XXX"]可以得到指定的列名为XXX的列数据构成的series。[]中还可以是list类型。

根据列数据的属性作切片,df.select_dtype(exclude/include="object").colums

对列作删除。df.drop(["XXX"],axis=1),删除XXX列,注意轴方向要选取axis=1

drop(labels, axis=0, level=None, inplace=False, errors='raise'),默认按行删除

对行作切片。df.loc[[]],注意是两层中括号,否则得到的是列形式的series。中括号中是行索引。

重置索引

在数据清洗后,一些数据被清除:

df.drop(index=[0, 1])     ************>df.drop([0, 1])***************>df.drop([0, 1]axis=0)
df.drop(columns=['B', 'C'])***********df.drop(['B', 'C'], axis=1)

保留下的dataframe,其每一行的索引和之前一样,但是不同行之间的索引不再连续,这时用for循环按照行数遍历就会出问题。我们可以使用reset_index()重置索引。重置前后打印df会发现df多出一列名为“index”或者“level_0”的列,这是因为reset_index()默认将原有的索引值保存为新的一列。解决办法也很简单:

(df.reset_index(drop=True))

属性

df.shape,得到行数与列数

df.head(),得到dataframe的前五行

df.tail(),得到dataframe的后五行

df.head().append(df.tail()),将前后五行连接出来,打印出来可以观察数据

df.isnull().sum(),得到一个series,索引是列名,数据值是该列中空值的数目

pd.melt,pivot的逆操作,将列名视作数据。

通过列的属性选择df的子集

df.select_dtypes(include='bool')
df.select_dtypes(exclude=['int'])

返回的仍然是dataframe,再使用columns则可以得到筛选之后的列名组成,形式如

Index(['A', 'B', 'C'], dtype='object')

取values可以得到数组类型的列名,再取tolist可以得到list

dtype可以得到dataframe的字段类型,使用astype可以对其转换。

df['col2'] = df['col2'].astype('int')

取values之后其实就是ndarray类型的,这时如果想将dadaframe转置,可以利用array的转置T,然后列名和行名分别使用之前的行名和列名构建新的dataframe

df2 = pd.DataFrame(df.values.T, index=df.columns, columns=df.index)

改变整列数据

一般每一列代表一个特征,为了验证某一特征对最终结果的影响,需要对该列数据进行整体变换,可以使用map的方法:

df["feature1"]=df["feature1"].map(lambda x:x*2)

https://www.tuziang.com/combat/732.html

https://www.jianshu.com/p/6e35d37e7709

<think>好的,我现在需要回答用户关于DataFrame常用函数的问题。首先,我得回忆一下自己了解的Pandas库中的DataFrame函数,确保信息准确。用户可能刚接触DataFrame,所以需要结构清晰,分步骤介绍,并且用中文。 首先,应该明确DataFrame是Pandas的核心数据结构,用于处理结构化数据。接下来,需要分类别介绍常用函数,这样用户更容易理解。比如数据查看、数据清洗、数据统计、数据合并、分组聚合、时间处理等。 数据查看方面,head()和tail()是基本函数,用来查看前后几行。info()和describe()也很重要,能显示数据概览和统计摘要。shape和columns属性也需要提到,虽然不是函数,但用户常用到。 数据清洗部分,dropna()和fillna()处理缺失值,drop()删除行列,rename()重命名列,这些是常用函数。替换数据的话,replace()也很关键。 数据统计方面,sum()、mean()、median()、max()、min()这些聚合函数要提到。还有corr()计算相关性,unique()和nunique()处理唯一值。 数据合并,用户可能需要用merge()和concat(),所以需要解释它们的用途。分组聚合的话,groupby()结合agg()是核心,需要举例说明。 时间处理方面,如果数据有时间列,to_datetime()转换格式,resample()进行重采样,比如按周、月聚合数据。 排序和筛选部分,sort_values()和sort_index()负责排序,而loc和iloc用于数据筛选,虽然它们是属性,但用户经常使用,应该包括进来。 应用函数部分,apply()和applymap()可以用来对数据应用自定义函数,这部分对于复杂操作很有帮助。 最后,加上一个示例,让用户更直观地理解如何使用这些函数。同时提醒参考官方文档,确保用户知道如何深入了解更多内容。 需要注意用户提到的系统级指令,比如数学公式的格式,但这个问题不涉及数学公式,所以可能不需要处理。但需要检查是否有其他格式要求,比如列表的使用,结构清晰。 总结步骤:先分大类,每个大类下列举常用函数,简要说明用途,并给出示例代码。这样用户能一步步了解每个函数的用途和用法。确保语言简洁,避免术语晦涩,适合初学者理解。</think>DataFrame 是 Python 中 `pandas` 库的核心数据结构,用于处理结构化数据。以下是其常用函数分类及说明,结合示例逐步讲解: --- ### 一、**数据查看与信息获取** 1. **`head(n)` / `tail(n)`** 查看前/后 `n` 行数据(默认 `n=5`)。 ```python df.head(3) # 显示前3行 ``` 2. **`info()`** 显示数据概况:列名、非空值数量、数据类型。 ```python df.info() # 输出各列数据类型和缺失情况 ``` 3. **`describe()`** 生成数值型列的统计摘要(均值、标准差、分位数等)。 ```python df.describe() ``` 4. **`shape`** 返回 DataFrame 的行列数(属性,非函数)。 ```python print(df.shape) # 输出 (行数, 列数) ``` 5. **`columns`** 获取所有列名(属性,可修改)。 ```python df.columns = ['新列名1', '新列名2'] # 重命名列 ``` --- ### 二、**数据清洗** 1. **`dropna()`** 删除包含缺失值的行或列。 ```python df.dropna(axis=1) # 删除含缺失值的列 ``` 2. **`fillna(value)`** 填充缺失值。 ```python df.fillna(0) # 用0填充缺失值 ``` 3. **`drop()`** 删除指定行/列。 ```python df.drop('列名', axis=1) # 删除某列 ``` 4. **`rename()`** 重命名列或行索引。 ```python df.rename(columns={'旧列名': '新列名'}) ``` 5. **`replace()`** 替换指定值。 ```python df.replace('旧值', '新值') ``` --- ### 三、**数据统计与计算** 1. **`sum()` / `mean()` / `median()` / `max()` / `min()`** 按列或行计算统计值。 ```python df['列名'].sum() # 计算某列总和 ``` 2. **`corr()`** 计算列之间的相关系数矩阵。 ```python df.corr() # 显示相关性矩阵 ``` 3. **`value_counts()`** 统计某列唯一值的频次。 ```python df['列名'].value_counts() ``` 4. **`unique()` / `nunique()`** 获取唯一值列表或数量。 ```python df['列名'].unique() # 返回唯一值数组 ``` --- ### 四、**数据合并与重塑** 1. **`merge()`** 按列合并两个 DataFrame(类似 SQL JOIN)。 ```python pd.merge(df1, df2, on='公共列名') ``` 2. **`concat()`** 按行或列拼接多个 DataFrame。 ```python pd.concat([df1, df2], axis=0) # 垂直拼接 ``` 3. **`groupby()`** 按指定列分组,配合聚合函数使用。 ```python df.groupby('列名').mean() # 按列分组后求均值 ``` --- ### 五、**时间处理** 1. **`to_datetime()`** 将列转换为日期时间格式。 ```python df['日期列'] = pd.to_datetime(df['日期列']) ``` 2. **`resample()`** 按时间频率重采样(如按周、月聚合)。 ```python df.resample('M').sum() # 按月求和 ``` --- ### 六、**排序与筛选** 1. **`sort_values()`** 按某列的值排序。 ```python df.sort_values('列名', ascending=False) # 降序排列 ``` 2. **`sort_index()`** 按索引排序。 ```python df.sort_index(ascending=True) ``` 3. **`loc[]` / `iloc[]`** 按标签 (`loc`) 或位置 (`iloc`) 筛选数据。 ```python df.loc[df['列名'] > 10] # 筛选某列大于10的行 ``` --- ### 七、**应用函数** 1. **`apply(func)`** 对行或列应用自定义函数。 ```python df['新列'] = df['列名'].apply(lambda x: x*2) ``` 2. **`applymap(func)`** 对每个元素应用函数。 ```python df.applymap(lambda x: len(str(x))) ``` --- ### 示例:综合使用 ```python import pandas as pd # 创建示例 DataFrame data = {'A': [1, 2, None], 'B': ['x', 'y', 'z']} df = pd.DataFrame(data) # 填充缺失值 → 按列求和 → 重命名列 df_filled = df.fillna(0) df_sum = df_filled.sum() df_renamed = df.rename(columns={'A': '新列名'}) ``` --- 通过灵活组合这些函数,可以高效完成数据清洗、分析和可视化。建议结合具体场景查阅 [`p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值