Pandas笔记
Useful link
Joyful Pandas:http://joyfulpandas.datawhale.club/Content/
Pandas学习Blog:https://re-thought.com/author/anna/
Dataframe
基础操作
改变某一列的数据类型:``df[‘col_name’]= df[‘col_name’].astype(float)`
某一列的值转换为列表输出:
df[num_name].to_list()
按某列的值排序:
df.sort_values(by="DUT", ascending=True)
,ascending=True为升序,False为降序新增一列相同值的数据:
df['col_name']=?
改变列顺序/按指定顺序提取列:
df =df[['col1', 'col2']]
1 | repeat_df = df[ids.isin(ids[ids.duplicated()])].sort_index() |
拼接 (重复列名处理suffixes)
1 | # suffixes默认值为['_x', '_y'] |
分组
1 | df.groupby(分组依据)[数据来源].使用操作 |
修改列名/索引
- 修改某个/几个index/列标签:df.rename(index={0: ‘均值’}, columns= inplace=True)
1 | df.rename(index={0: '均值'}, columns={'one': '1'}, inplace=True) |
- 指定一列数据作为新的index:
DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
- keys:列标签或列标签/数组列表,需要设置为索引的列
- drop:默认为True,删除用作新索引的列
- append:是否将列附加到现有索引,默认为False。
- inplace:输入布尔值,表示当前操作是否对原数据生效,默认为False。
- verify_integrity:检查新索引的副本。否则,请将检查推迟到必要时进行。将其设置为false将提高该方法的性能,默认为false。
1 | # 将col_name这一列的值作为新的索引,drop默认为True,删除原来那一列数据 |
读取指定列与行
loc:基于标签的名称,包括行标签(index)和列标签(columns),即行名称和列名称,可以使用:
df.loc[index_name,col_name]
- index可以是单个标签,List标签,或者切片标签
- columns为单个标签,List标签,或者切片标签
df.loc[df.one > 2]
/df.loc[ df.one> 2, ['one']]
([‘one’]返回df,’one’返回series)返回符合列Bool条件的指定列,Bool条件中调用列的名称不加引号
iloc:基于标签的位置序号,行和列标签序号从0开始。
df[….]:可以读取列:df['col_name']
读行:df[5:10]
(行序号,左闭右开)
1 | one two |
1 | -----col----- |
1 | columns_to_use_list = ['col1', 'col2', 'col3'] |
添加/合并两个Col标签一样的df
- 新增一行数据:
df.append([{'col1': value}], ignore_index=True)
,如果col值字典中没有的列,则该列值为Nan - 合并两个df:
df1.append(df2, ignore_index=True/FALSE)
- ignore_index:默认为False,保持原有的index,True则重新生成从0开始的整数index,
Series
遍历series中的index与值
1 | for index, value in test.items(): |
获取series中的最大值与对应index:series.max()
,series.idxmax()
Series转置为df
1 | s = df.mean() |
Dataframe与Series的通用操作
- 转置:
.transpose() / .T
- 对小数位数进行四舍五入,而不是对小数点的输出格式进行指定 ]:
.round(小数位数) / .round({'col1':2, 'col2':3})
,返回新对象,原对象不作修改
df.to_excel 调整列宽
pd.ExcelWriter的使用方法
1 | # Create a Pandas Excel writer using XlsxWriter as the engine. |
ExcelWriter调整Excel列宽
1 | # 动态调整所有列长: |
pandas读取过大过小数字的数据/科学计数法的处理
科学记数法(带 e 的数字):表示非常大或非常小的数字的方法。当 1 到 10 之间的数字乘以 10 的幂时,数字以科学计数法书写。(Python Pandas使用该符号标准,在读取过大或者过小数据时会自动转换为科学计数法)
- 2.3 e -5: 2.3 乘以 10 的负五次方 / 0.000023
- 4.5 e+6: 4.5 乘以 10 的 6 次方 / 4500000
Python float Type : inf
- python中的正无穷或负无穷,使用float(“inf”)或float(“-inf”)来表示
- float(“inf”),float(“INF”)或者float(‘Inf’)都是可以的
- 涉及 > 和 < 比较时,所有数都比无穷小float(“-inf”)大,所有数都比无穷大float(“inf”)小,无穷大本身和无穷大是相等的
Python float Type : nan(not a number)
- nan不是一个数,与任何数字的相关计算结果都为nan
- 涉及 > 和 < 和==比较时,结果都是False(nan==nan,结果也是False)
1 | import math |
1 | df = pd.DataFrame(np.random.random(5)**10, columns=['random']) |
to_numeric 转换数据类型
- 能够对字符格式的数值进行快速转换和筛选。主要参数包括 :
- errors - 非数值的处理模式:
ignore
,raise
(default),coerce
(保持原来的字符串,直接报错,设为缺失Nan
) - downcast - 转换类型:
integer
,signed
,unsigned
,float
, default None。
- errors - 非数值的处理模式:
1 | df['col_name'] = pd.to_numeric(df['col_name'], errors='coerce', downcast='integer') |
fillna(value, [method, limit]) 缺失值填充
- method:ffill/bfill 前面/后面的元素填充
- limit:int,连续缺失值的最大填充次数
any()返回任何元素是否为真(/在轴上)
- axis : {0 or ‘index’, 1 or ‘columns’, None}
- bool_only :
bool
, 默认None
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.