【379】pandas 说明
参考:Kaggle Pandas Tutorial Part 1
参考:Kaggle Pandas Tutorial Part 2
参考:Pandas速查手册
- pandas.Series:单列的
- pandas.DataFrame:数据表格
ref: Pandas: Comparison with SQL(※ 文档中对比两者的实现方式)
Series([data, index, dtype, name, copy, …]) One-dimensional ndarray with axis labels (including time series).
I. Add new column
ref: Adding new column to existing DataFrame in Pandas
- By declaring a new list as a column
- By using DataFrame.insert()
- Using Dataframe.assign() method
- By using a dictionary
II. Loop through Series
- Series.iteritems()
- This function will return a list of tuples, so we should use item[1] to get the specific value of every row.
III. Loop through DataFrame
ref: Different ways to iterate over rows in Pandas Dataframe
- Using index attribute of the Dataframe
123df[
"Name"
][index]
# 列名+索引
df[
"Name"
]
# 相当于获取 Series
df[
"Name"
][index]
# 从 Series 中获取具体索引的值
- Using loc[] function of the Dataframe
1df.loc[index,
"Name"
]
# 索引+列名
按照列名定位 cell - Using iloc[] function of the DataFrame
1df.loc[index, index]
# 行索引+列索引
- Using iterrows() method of the Dataframe
- Using itertuples() method of the Dataframe
- Using apply() method of the Dataframe
IV. Get Unique Values in A pandas column
- 获取列的不重复值,df.name.unique() ,参考:List Unique Values In A pandas Column
- 获取列不重复值的数量,df.name.value_counts() ,参考:Count unique values with pandas per groups [duplicate]
V. Sum DataFrame rows
-
12
df[
'Total'
]
=
df.iloc[:,
1
]
+
df.iloc[:,
2
]
+
df.iloc[:,
3
]
df[
'Total'
]
=
df.iloc[:,
1
:
4
].
sum
(axis
=
1
)
# row1+row2+row3
VI. Convert Strings to Floats for columns
ref: How to Convert Strings to Floats in Pandas DataFrame
-
123456
df_geo_aus[
'co_lon'
]
=
df_geo_aus[
'co_lon'
].astype(
float
)
df_geo_aus[
'co_lat'
]
=
df_geo_aus[
'co_lat'
].astype(
float
)
df_geo_aus[
'geo_lon'
]
=
df_geo_aus[
'geo_lon'
].astype(
float
)
df_geo_aus[
'geo_lat'
]
=
df_geo_aus[
'geo_lat'
].astype(
float
)
df_geo_aus.dtypes
- 利用 astype() 来实现,然后通过 dtypes 来查看
VII. Keras Tutorial: Deep Learning
- if separator is a semicolon and not a regular comma
pd.read_csv("path", sep=';') - data exploration
df.info() - add a new column
red['type'] = 1
white['type'] = 0
# append 'white' to 'red'
wines = red.append(white, ignore_index=True) - heatmap from seaborn
123456import
seaborn as sns
corr
=
wines.corr()
sns.heatmap(corr,
xticklabels
=
corr.columns.values,
yticklabels
=
corr.columns.values)
plt.show()
- import the train_test_split from sklearn.model_selection
1234567891011# Import `train_test_split` from `sklearn.model_selection`
from
sklearn.model_selection
import
train_test_split
# Specify the data
X
=
wines.ix[:,
0
:
11
]
# Specify the target labels and flatten the array
y
=
np.ravel(wines.
type
)
# Split the data up in train and test sets
X_train, X_test, y_train, y_test
=
train_test_split(X, y, test_size
=
0.33
, random_state
=
42
)
- standardize the data
1234567891011# Import `StandardScaler` from `sklearn.preprocessing`
from
sklearn.preprocessing
import
StandardScaler
# Define the scaler
scaler
=
StandardScaler().fit(X_train)
# Scale the train set
X_train
=
scaler.transform(X_train)
# Scale the test set
X_test
=
scaler.transform(X_test)
VIII. Rename columns of DataFrame
- 参考:python——修改Dataframe列名的两种方法
- df.rename(columns={'a':'A'}, inplace=True)
表示原地修改
目录
- Series 对象的几种创建方式
- DataFrame 对象的几种创建方式
- Series 对象元素的选取方式
- DataFrame 对象元素的选取方式
- 位置索引(查询)
- 自定义索引(查询)
- 在有多重索引的情况下进行选取
- 布尔索引(查询)
一、基础概念
- import pandas as pd,是 Pandas 库约定的导入方式。
- Pandas 库的两种重要数据类型:
Series
类型(对应一维)和DataFrame
类型(对应二维)。 - DataFrame 类型的每一列对应着一个 Series 类型。
- DataFrame 类型中行和列的概念,大部分方法默认使用的是行(即 axis=0),通过 axis=1 来指定使用列。注意这里的行和列指的是用来计算的部分,如使用不指定 axis 的 count() 时,会把每一列的所有行的值加起来。
二、创建基本对象
1. Series 对象的几种创建方式
1 2 3 4 5 6 7 8 9 10 | # 不指定索引,也会有默认的位置索引(0...n),从 0 开始 pd.Series( range ( 5 )) # 加上自定义索引,会和默认索引共存 pd.Series([ 9 , 8 , 7 , 6 ], [ 'a' , 'b' , 'c' , 'd' ]) # 字典形式创建 pd.Series({ 'a' : 1 , 'b' : 2 , 'c' : 3 }) # 根据索引选择字典中的值,不存在返回 NaN pd.Series({ 'a' : 8 , 'b' : 9 , 'c' : 7 }, [ 'c' , 'b' , 'd' , 'a' ]) # 和 Numpy 完美兼容 pd.Series(np.arange( 3 ), [ 'one' , 'two' , 'three' ]) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | >>> import pandas as pd >>> pd.Series( range ( 5 )) 0 0 1 1 2 2 3 3 4 4 dtype: int64 >>> pd.Series([ 9 , 8 , 7 , 6 ], [ 'a' , 'b' , 'c' , 'd' ]) a 9 b 8 c 7 d 6 dtype: int64 >>> pd.Series({ 'a' : 1 , 'b' : 2 , 'c' : 3 }) a 1 b 2 c 3 dtype: int64 >>> import numpy as np >>> pd.Series(np.arange( 3 ), [ 'one' , 'two' , 'three' ]) one 0 two 1 three 2 dtype: int32 |
2. DataFrame 对象的几种创建方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 用 ndarray 对象创建 pd.DataFrame(np.arange( 10 ).reshape( 2 , 5 )) # 用 Series 对象创建 dt = { 'one' : pd.Series([ 1 , 2 , 3 ], [ 'a' , 'b' , 'c' ]), 'two' : pd.Series([ 9 , 8 , 7 , 6 ], [ 'a' , 'b' , 'c' , 'd' ]), } pd.DataFrame(dt) # 用字典组成的列表创建 lst = [{ 'one' : 1 }, { 'one' : 2 }, { 'one' : 3 }] pd.DataFrame(lst) # 指定行列 dates = pd.date_range( '20180101' , periods = 6 ) # 创建一个长度为 6 的时间序列,单位天 pd.DataFrame(np.random.randn( 6 , 4 ), index = dates, columns = list ( 'ABCD' )) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | >>> pd.DataFrame(np.arange( 10 ).reshape( 2 , 5 )) 0 1 2 3 4 0 0 1 2 3 4 1 5 6 7 8 9 >>> dt = { 'one' : pd.Series([ 1 , 2 , 3 ], [ 'a' , 'b' , 'c' ]), 'two' : pd.Series([ 9 , 8 , 7 , 6 ], [ 'a' , 'b' , 'c' , 'd' ]) } >>> pd.DataFrame(dt) one two a 1.0 9 b 2.0 8 c 3.0 7 d NaN 6 >>> lst = [{ 'one' : 1 }, { 'one' : 2 }, { 'one' : 3 }] >>> lst [{ 'one' : 1 }, { 'one' : 2 }, { 'one' : 3 }] >>> pd.DataFrame(lst) one 0 1 1 2 2 3 >>> dates = pd.date_range( '20180101' , periods = 6 ) >>> pd.DataFrame(np.random.randn( 6 , 4 ), index = dates, columns = list ( 'ABCD' )) A B C D 2018 - 01 - 01 - 0.855157 - 1.578338 1.225785 - 0.114200 2018 - 01 - 02 0.281253 - 0.120724 - 1.423745 - 1.715242 2018 - 01 - 03 1.699892 0.462409 - 1.219692 0.870826 2018 - 01 - 04 - 1.723124 - 0.731188 - 0.411660 - 0.409501 2018 - 01 - 05 - 0.730508 0.216860 - 1.342256 2.212581 2018 - 01 - 06 - 0.842541 - 1.871722 - 0.287997 - 0.868190 |
3. Series 对象元素的选取方式
注意位置索引和自定义索引不能混用。
位置索引
1 2 3 4 5 6 | # 选取第 2 行元素 s[ 1 ] # 选取第 2 到第 9 行元素 s[ 1 : 9 ] # 选取第 2 到最后,每隔 2 行的元素 s[ 1 :: 2 ] |
自定义索引
1 2 3 4 5 6 | # 选取 one 行的元素 s[ 'one' ] # 选取 one 到 three 行元素 s[ 'one' : 'three' ] # 选取开头到 three 行,每隔 2 行的元素 s[: 'three' : 2 ] |
布尔索引
1 2 3 4 5 6 | # 选取所有 value 小于 10 的 s s[s < 10 ] # 选取所有 value 大于等于 10,小于 20 的 s s[s.between( 10 , 20 )] # 选取所有 value 等于 5 或 10 的 s s[s.isin([ 2 , 5 ])] |
4. DataFrame 对象元素的选取方式
注意位置索引和自定义索引不能混用。
要选取列,用这种方式,快很多(但不支持位置索引和切片):
1 2 3 4 5 6 7 8 | # 选择 xm 这一列,是 Series 类型 df[ 'xm' ] # 选择 xm 这一列,是 DataFrame 类型 df[[ 'xm' ]] # 选择 xm, csrq 两列,是 DataFrame 类型 df[[ 'xm' , 'csrq' ]] # 列顺序会根据输入顺序返回,所以这种方法可以改变列顺序 df = df[[ 'csrq' , 'xm' ]] |
5. 位置索引
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 选择第二行所有数据,是 Series 类型 df.iloc[ 2 ] # 选择第二行所有数据,是 DataFrame 类型 df.iloc[[ 2 ]] # 选择第二列所有数据,是 Series 类型 df.iloc[:, 2 ] # 选择第二列所有数据,是 DataFrame 类型 df.iloc[:, [ 2 ]] # 选择第 1、2、-2、-1 列所有数据,是 DataFrame 类型 df.iloc[:, [ 1 , 2 , - 2 , - 1 ]] # 选择 0 到 2 列所有数据 df.iloc[:, 0 : 2 ] # 选择 2 和 3 行,0 到 2 列所有数据 df.iloc[[ 2 , 3 ], 0 : 2 ] # 根据位置快速取出数据,获取单个数据推荐这种方法 df.iat[ 1 , 1 ] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | >>> import numpy as np >>> import pandas as pd >>> a = np.arange( 12 ).reshape( 3 , 4 ) >>> a array([[ 0 , 1 , 2 , 3 ], [ 4 , 5 , 6 , 7 ], [ 8 , 9 , 10 , 11 ]]) >>> b = pd.DataFrame(a) >>> b 0 1 2 3 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 >>> b.iloc[ 2 ] 0 8 1 9 2 10 3 11 Name: 2 , dtype: int32 >>> b.iloc[[ 2 ]] 0 1 2 3 2 8 9 10 11 >>> b.iloc[:, 2 ] 0 2 1 6 2 10 Name: 2 , dtype: int32 >>> b.iloc[:, [ 2 ]] 2 0 2 1 6 2 10 >>> b.iloc[:, [ 1 , 2 , - 2 , - 1 ]] 1 2 2 3 0 1 2 2 3 1 5 6 6 7 2 9 10 10 11 >>> b.iloc[:, 0 : 2 ] 0 1 0 0 1 1 4 5 2 8 9 >>> b.iloc[[ 1 , 2 ], 0 : 2 ] 0 1 1 4 5 2 8 9 >>> b.iat[ 1 , 1 ] 5 |
6. 自定义索引
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 选择指定行数据,是 Series 类型 df.loc[ 'top' ] # 选择指定行数据,是 DataFrame 类型 df.loc[[ 'top' ]] # 选择指定列数据,是 Series 类型(不推荐) df.loc[:, 'xm' ] # 选择指定列数据,是 DataFrame 类型(不推荐) df.loc[:, [ 'xm' ]] # 选择多列数据(不推荐) df.loc[:, [ 'bj' , 'xm' ]] # 选择多列之间所有数据,列切片只能用这种方法 df.loc[:, 'bj' : 'xb' ] # 选择指定行,指定列数据 df.loc[[ 'top' , 'count' ], 'bj' : 'xb' ] # 根据自定义索引快速取出数据,获取单个数据推荐这种方法 df.at[ 'top' , 'xm' ] |
7. 在有多重索引的情况下进行选取
在用 df.set_index() 设置了多个索引的情况下使用。
1 2 3 4 5 6 | # 一级索引,二级索引 df.loc[( 'state' , 'city' )] # 上面的省略写法 df.loc[ 'state' , 'city' ] # 同时指定列 df.loc[( 'state' , 'city' ), [ 'name' ]] |
8. 布尔索引(查询)
类似 SQL 查询,可以选取需要的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 选取所有出生日期大于等于 1998 年的数据,这里是字符串比较(直接比较数值查询) df[df[ 'csrq' ]> = '1998' ] # 选取所有出生日期大于等于 1997 年小于 1999 年的数据(and 关系查询) df[(df[ 'csrq' ]> = '1997' )&(df[ 'csrq' ]< '1999' )] # 选取所有出生日期大于等于 1997 年小于 1999 年的数据(数值范围查询) df[df[ 'csrq' ].between( '1997' , '1999' )] # 选取所有出生日期大于等于 1997 年或者姓名为张三的数据(or,不同属性的条件查询) df[(df[ 'csrq' ]> = '1997' )|(df[ 'xm' ] = = '张三' )] # 另一种选取方式(不推荐,实测效率比上面低) df[df.csrq> = '1998' ] # 选择字段值为指定内容的数据(多个选择,类似 or,同一属性多个选择) df[df[ 'xm' ].isin([ '张三' , '李四' ])] |
三、Series 对象的使用实例
1. 重要属性
1 2 3 4 5 6 7 8 9 10 | # 所有元素的 value,ndarray 类型 s.values # 元素类型 s.dtype # 元素的数量 s.size # 每个元素的大小,字节为单位 s.itemsize # 所有数据占用的大小,字节为单位,等于 `s.size * s.itemsize` s.nbytes |
2. 常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 返回一个去重后的 ndarray 数组 s.unique() # 显示唯一值和计数,dropna=False 代表不包含 NaN s.value_counts(dropna = False ) # 删除第一行,非原地 s.drop( 0 ) # 在行尾添加数据,s 是 Series 对象 s.append(s) # 将 func 作用在 s 所有值上 s. apply (func) # 根据 s 的 value 排序,可传入 ascending 参数决定升序降序 s.sort_values() # 根据 s 的 index 排序,可传入 ascending 参数决定升序降序 s.sort_index() # 改变类型,非原地 s.astype() |
3. 字符串系列方法
字符串类型在 Pandas 中显示为 object。
1 2 3 4 5 6 | # 和 Python 原生字符串操作基本一致,只不过作用于所有元素 s. str .xxx() # 是否包含字符串,支持通配符,返回 bool 数组 s. str .contains( 'Din*' ) # 支持切片,同样作用于所有元素 s. str [ 1 , - 1 ] |
4. 时间系列方法
先要用 pd.to_datetime(s['time']) 或 s.astype('datetime64[ns]') 把 Series 对象元素类型转成 datetime64[ns] 类型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 取出年月日 s.dt.date() # 取出时间 s.dt.time() # 取出年 s.dt.year() # 取出月 s.dt.month() # 取出日 s.dt.day() # 取出时 s.dt.hour() # 取出分 s.dt.minute() # 取出秒 s.dt.second() |
5. 相关运算
1 2 | # 所有元素加 1,原地 s + = 1 |
其他符号的运算与此类似。
四、DataFrame 对象的使用实例
大部分也适用 Series 类型。
1. 重要属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 查看所有元素的 value df.values # 查看所有元素的类型 df.dtypes # 查看所有行名,后加 `.tolist()`,可以返回列表 df.index # 重命名行名,所有 df.index = [ '总数' , '不同' , '最多' , '频率' ] # 查看所有列名,后加 `.tolist()`,可以返回列表 df.columns # 重命名列名,所有 df.columns = [ '班级' , '姓名' , '性别' , '出生日期' ] # 重命名列名,指定列,更好 df.rename(columns = { 'A' : 'a' , 'B' : 'b' , 'C' : 'c' }, inplace = True ) # 转置后的 df,非原地 df.T |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | >>> b.values array([[ 0 , 1 , 2 , 3 ], [ 4 , 5 , 6 , 7 ], [ 8 , 9 , 10 , 11 ]]) >>> b.dtypes 0 int32 1 int32 2 int32 3 int32 dtype: object >>> b.index RangeIndex(start = 0 , stop = 3 , step = 1 ) >>> b.columns RangeIndex(start = 0 , stop = 4 , step = 1 ) >>> b.columns.tolist() [ 0 , 1 , 2 , 3 ] >>> b.T 0 1 2 0 0 4 8 1 1 5 9 2 2 6 10 3 3 7 11 |
2. 查看数据
1 2 3 4 5 6 7 8 9 10 | # 查看 df 前 n 条数据, 默认 5 条 df.head(n) # 查看 df 后 n 条数据, 默认 5 条 df.tail(n) # 随机查看 n 条数据 df.sample(n) # 查看行数和列数 df.shape # 查看索引,数据类型和内存信息 df.info |
3. 数据统计
默认统计的是行,但大部分可以通过设置参数 axis=1 来计算列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | # 查看数据统计特征,是 DataFrame 类型,只显示能统计的列 df.describe() # 返回每一列中的非空值的个数 df.count() # 返回每一列的和,无法计算返回空,下同 df. sum () # `numeric_only=True` 代表只计算数字型元素,下同 df. sum (numeric_only = True ) # 返回每一列的最大值 df. max () # 返回每一列的最小值 df. min () # 返回最大值所在的自动索引位置 df.argmax() # 返回最小值所在的自动索引位置 df.argmin() # 返回最大值所在的自定义索引位置 df.idxmax() # 返回最小值所在的自定义索引位置 df.idxmin() # 返回每一列的均值 df.mean() # 返回每一列的中位数 df.median() # 返回每一列的方差 df.var() # 返回每一列的标准差 df.std() # 检查 df 中空值,NaN 为 True,否则 False,返回一个布尔数组 df.isnull() # 检查 df 中空值,非 NaN 为 True,否则 False,返回一个布尔数组 df.notnull() # 相关系数 df.corr() # 默认 pearson df.corr( 'spearman' ) df.corr( 'kendall' ) |
4. 数据处理
- 将字符串直接转为 datetime 类型
- 直接获取 datetime 中的日期和时间信息
- 去除重复项(去除重复的 Tweets)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | # 改变列顺序 df = df[[ 'xm' , 'csrq' ]] # 改变指定列元素类型,非原地 df.astype({ 'xh' : 'int' , 'csrq' : 'datetime64[ns]' }) # 根据 xm 和 xh 去重,默认保留第一个数据,非原地 df.drop_duplicates([ 'xm' , 'xh' ]) # 不传入参数,所有列相同才会去重,保留最后一个数据,非原地 df.drop_duplicates(keep = 'last' ) # 不保留重复项(求差集),非原地 df.drop_duplicates(keep = False ) # 根据 csrq 排序,默认升序,非原地 df.sort_values(by = 'csrq' ) # ascending 决定升序降序 df.sort_values([ 'col1' , 'col2' ], ascending = [ True , False ]) # 用 'one' 代替所有等于 1 的值 df.replace( 1 , 'one' ) # 用 'one' 代替 1,用 'three' 代替 3 df.replace([ 1 , 3 ], [ 'one' , 'three' ]) # 用 x 替换 df 中所有的空值,非原地 df.fillna(x) # 用 x 替换 df 的 xh 列中所有的空值 df.fillna({ 'xh' : 0 }) # 删除所有包含空值的行 df.dropna() # 删除所有包含空值的列 df.dropna(axis = 1 ) # 删除某列含有空值的行 df.dropna(subset = [ 'nj' ]) # 设置多索引,并排序索引 df.set_index([ 'state' , 'city' ]).sort_index() # 把相关函数作用在所有 df 成员上 df.applymap(func) # 根据其他列处理某列 df. apply ( lambda x: func(x[ 'sell sku' ], x[ 'shape' ]), axis = 1 ) |
5. 分组
1 2 3 4 5 6 7 | # 根据列分组 df.groupby([ 'Country' , 'Income' ]) # 聚合,默认情况对分组之后其他列进行聚合 df.groupby( 'Country' ).agg([ 'min' , 'mean' , 'max' ]) # 对分组后的部分列进行聚合 num_agg = { 'Age' :[ 'min' , 'mean' , 'max' ]} df.groupby( 'Country' ).agg(num_agg) |
groupby 可以简单总结为 split,apply,combine,也就是说:
- split : 先将数据按一个属性分组(得到 DataFrameGroupby / SeriesGroupby)
- apply : 对每一组数据进行操作(取平均 取中值 取方差 或 自定义函数)
- combine:将操作后的结果结合起来(得到一个DataFrame 或 Series 或可视化图像)
6. 添加和删除
1 2 3 4 5 6 7 8 9 10 11 12 | # 假设 cj 列本来不存在,这样会在列尾添加新的一列 cj,值为 s(Series 对象),原地 df[ 'cj' ] = s # 添加或修改一个列表在指定行,原地 df.iloc[ 0 ] = lst # 在第 1 列位置插入一列 dz(地址),值为 s,原地 df.insert( 0 , 'dz' , s) # 删除单列,并返回删除的列,原地 df.pop( 'xm' ) # 删除指定行,非原地 df.drop( 1 ) # 删除指定列,axis=1 指第 2 维(列),axis 默认 0(行),非原地 df.drop([ 'xm' , 'xh' ], axis = 1 ) |
7. 合并
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 内连接 Inner Join output = pd.merge(df1, df2, on = 'key' ) # 左连接 Left Outer Join output = pd.merge(df1, df2, on = 'key' , how = 'left' ) # 右连接 Right Join output = pd.merge(df1, df2, on = 'key' , how = 'right' ) # 全连接 Full Join output = pd.merge(df1, df2, on = 'key' , how = 'outer' ) # 在 df 中添加内容为 df2 (必须是 DataFrame 对象)的新列(添加列),非原地 df.join(df2) # 将 df2 中的行添加到 df 的尾部(添加行),非原地 df.append(df2) |
8. 相关运算
1 2 3 4 | # age 列所有元素加 1,原地 df[ 'age' ] + = 1 # ... |
还可以调用方法,方法中可以指定运算的维度:
1 | df.div(df. sum (), axis = 0 ) |
9. Pandas 其他常用函数
1 2 3 4 5 6 7 8 9 10 | # 将 Series 对象转换成时间类型,可以用相关方法 pd.to_datetime(s) # 生成一个时间列表,periods 决定数量,freq 决定单位,比如这里 'D' 是指天 # 成员是 Timestamp 类型,可以使用相关方法 pd.date_range( '2017-7-27' , periods = 15 , freq = 'D' ) # 判断某个值是否为 NAN # 也可判断 df, 返回一个 bool 类型的 df pd.isna(df) |
10. CSV 存取
1 2 3 4 | # 导出数据到 CSV 文件,不包含索引: df.to_csv( 'example.csv' , index = False ) # 从 CSV 文件导入数据: pd.read_csv( 'example.csv' ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # 首先查询当前的工作路径: import os os.getcwd() #获取当前工作路径 # to_csv()是DataFrame类的方法,read_csv()是pandas的方法 # dt.to_csv() #默认dt是DataFrame的一个实例,参数解释如下 # 路径 path_or_buf: A string path to the file to write or a StringIO dt.to_csv( 'Result.csv' ) #相对位置,保存在getwcd()获得的路径下 dt.to_csv( 'C:/Users/think/Desktop/Result.csv' ) #绝对位置 # 分隔符 sep : Field delimiter for the output file (default ”,”) dt.to_csv( 'C:/Users/think/Desktop/Result.csv' ,sep = '?' ) #使用?分隔需要保存的数据,如果不写,默认是, # 替换空值 na_rep: A string representation of a missing value (default ‘’) dt.to_csv( 'C:/Users/think/Desktop/Result1.csv' ,na_rep = 'NA' ) #确实值保存为NA,如果不写,默认是空 # 格式 float_format: Format string for floating point numbers dt.to_csv( 'C:/Users/think/Desktop/Result1.csv' ,float_format = '%.2f' ) #保留两位小数 # 是否保留某列数据 cols: Columns to write (default None) dt.to_csv( 'C:/Users/think/Desktop/Result.csv' ,columns = [ 'name' ]) #保存索引列和name列 # 是否保留列名 header: Whether to write out the column names (default True) dt.to_csv( 'C:/Users/think/Desktop/Result.csv' ,header = 0 ) #不保存列名 # 是否保留行索引 index: whether to write row (index) names (default True) dt.to_csv( 'C:/Users/think/Desktop/Result1.csv' ,index = 0 ) #不保存行索引 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步