要想知道每个函数的具体用法,最好的办法还是浏览官方库
Input/output — pandas 1.3.2 documentation (pydata.org)
Pandas: 强大的 Python 数据分析支持库 | Pandas 中文 (pypandas.cn)
pandas.Series(data=None, index=None)
其中, data 可以是字典,或者NumPy 里的 ndarray 对象等。 index 是数据索引,索引是 Pandas 数据结构中的一大特性,它主要的功能是帮助我们更快速地定位数据。
像字典一样,可以直接通过键值提取数据 生成时,默认的键值是0,1,2,3...
与Dataframe有一点明显的不同,Series支持数字索引提取行(大概是只有一列的缘故)
对于Series的加减乘除来说是按照索引对齐的
此外的方法还有
s4.add(s3)# 加 s4.sub(s3)# 减 s4.mul(s3)# 乘 s4.div(s3)# 除 s4.median()# 中位 s4.sum()# 和 s4.max()# 最大 s4.min()# 最小
DataFrame 是 Pandas 中最为常见、最重要且使用频率最高的数据结构。DataFrame 和平常的电子表 格或 SQL 表结构相似。你可以把 DataFrame 看成是 Series 的扩展类型,它仿佛是由多个 Series 拼合而 成。它和 Series 的直观区别在于,数据不但具有行索引,且具有列索引。
DataFrame 基本结构如下:
pandas.DataFrame(data=None, index=None, columns=None)
区别于 Series,其增加了 columns 列索引。DataFrame 可以由以下多个类型的数据构建:
Input/output — pandas 1.3.2 documentation (pydata.org)
#写入 pandas.read_csv() #读取 df.to_csv('animal.csv')
pd.read_excel('animal.xlsx', 'Sheet1', index_col=None, na_values=['NA']) df3.to_excel('animal.xlsx', sheet_name='Sheet1')
#显示头几行 df.head() #显示后几行 df.tail() #显示大致的描述 df.describe()
单个数字作为索引用来选取一行
df.loc[]
可以接受的类型有:
data.列名在列名中没有点的时候也可以用
通过逻辑表达式可以对dataframe中的内容进行筛选
# 生成 DataFrame 副本,方便数据集被多个不同流程使用 df3 = df2.copy() df3
data['id'] = np.arange(len(data))
可见数据集多了一列
利用map方法实现值的替换
data['is_ji'] = data['is_ji'].map({0: True,1: False})
利用一行代码进行0-1到True-False的变换
虽然我们可以通过数据选择方法从一个完整的数据集中拿到我们需要的数据,但有的时候直接删除 不需要的数据更加简单直接。Pandas 中,以 .drop 开头的方法都与数据删减有关。
DataFrame.drop 可以直接去掉数据集中指定的列和行。一般在使用时,我们指定 labels 标签 参数,然后再通过 axis 指定按列或按行删除即可。当然,你也可以通过索引参数删除数据,具体查看 官方文档。
df.drop(labels=['Median Age', 'Total Males'], axis=1)df.drop(labels=[1,2,3],axis=0)
DataFrame.drop_duplicates 则通常用于数据去重,即剔除数据集中的重复值。使用方法非常 简单,指定去除重复值规则,以及 axis 按列还是按行去除即可。
df.drop_duplicates()
可以看到利用此方法去掉了缺失值
除此之外,另一个用于数据删减的方法 DataFrame.dropna 也十分常用,其主要的用途是删除缺 少值,即数据集中空缺的数据列或行。
df.dropna()
Pandas 为了更方便地检测缺失值,将不同类型数据的缺失均采用 NaN 标记。这里的 NaN 代表 Not a Number,它仅仅是作为一个标记。例外是,在时间序列里,时间戳的丢失采用 NaT 标记。
Pandas 中用于检测缺失值主要用到两个方法,分别是: isna() 和 notna() ,故名思意就是 「是缺失值」和「不是缺失值」。默认会返回布尔值用于判断。
data.isna()生成的是一个布尔型的数组,所以可以用data.isna().describe()来判断空缺值的数目
df.fillna(0)
此方法直接把缺失值填为0
其中,limit参数表示最多向前寻找的数目
df.fillna(method='pad', limit=1) df.fillna(method='bfill')
df.fillna(df.mean()['C':'E'])
df_interpolate = df.interpolate()df_interpolate
对于 interpolate() 支持的插值算法,也就是 method= 。下面给出几条选择的建议:
如果你的数据增长速率越来越快,可以选择 method='quadratic' 二次插值。
如果数据集呈现出累计分布的样子,推荐选择 method='pchip' 。
如果需要填补缺省值,以平滑绘图为目标,推荐选择 method='akima' 。
当然,最后提到的 method='akima' ,需要你的环境中安装了 Scipy 库。除此之外,method='barycentric' 和 method='pchip' 同样也需要 Scipy 才能使用。
有时候,DataFrame 中不同列之间的数据差距太大,需要对其进行归一化处理。 其中,Max-Min 归一化是简单而常见的一种方式,公式如下:
def normalization(df): numerator = df.sub(df.min()) denominator = (df.max()).sub(df.min()) Y = numerator.div(denominator) return Y
类型变量是指这个变量的不同值仅仅表达不同的类型,值的大小不同但没有高低之分。
有很多变量都属于类型变量,例如 season=1,2,3,4 代表四季。
我们不能将 season 变量直接输入到神经网络,这是因为 season 数值越高并不表示相应的信号强度 越大。
解决方案是将类型变量用一个“一位热码“(one-hot)来编码,也就是: