python pandas dataframe 常用数据处理操作
新建dataframe对象
data = {}
df = pd.DataFrame(data = data)
表格导入dataframe对象
df = pd.read_exel('路径')
json转df
df = pd.json_normalize(jsontext)
df设置index索引
df = df.set_index(['A']
重置索引
df = df.reset_index()
去重索引列表,for遍历用。
list(df.index.unique())
新增列:
a = pd.Series([])
单列数据批量处理:用lambda 搭配apply处理
df['srcip'] = df['srcip'].apply(lambda x: x[0])
df['srcip'] = df['srcip'].apply(lambda x: x.replace("]",""))
只要其中几列,可改顺序,名字得对上
df = df[['a','b','c']]
判断是否为空:
df.empty
重命名列
df.columns = [['a','b','c']]
以某几列的值排序,
df.sort_values(by=['a','b'], inplace=True, ascending=[False, False])
DataFrame.sort_values(by, ascending=True, inplace=False)
参数说明:
by:字符串或者List<字符串>,单列排序或者多列排序
ascending:bool或者List,升序还是降序,如果是list对应by的多列
inplace:是否修改原始DataFrame
只要前几行:
df = df.head(10)
按条件选行
index = df[(df['a'] == abc)]
删除不需要的行
index = df[(df['A'] == 'a') | (df['b'].str.contains('其他'))]
df = df.drop(index.index)
新建一行求和
df.loc['sum'] = df[['a', 'b', 'c', 'd']].sum()
改变某列的数据类型:
方法1:
df['a'].astype('数据类型')
num=num.astype('str')
str(df[‘a’]) 会将整列的内容转换为单个字符串
方法2:
alist = [str(i) for i in alist]
看每列的数据类型:
df.dtype()
其中object 表示这列内容乱七八糟,可以用str的处理方法
某列转换为列表
alist = df['a'].tolist()
列表转化成字符串
str = ','.join(list)
excel按字符分列 label
df['one']=df['label'].str.split('_').str[0]
df['two']=df['label'].str.split('_').str[1]
df['three']=df['label'].str.split('_').str[2]
新建一列b,a列中包括‘com’内容的(第一个com),赋值为com(第二个com)
df.loc[df['a'].str.contains(com, na= '未知'),'b']=com
df.loc[:,'name'] #前面的冒号相当于一个切片,即选取所有行,如果直接df.loc['name']会报错
#标签列表,注意要使用 [[]] 的形式
df.loc[[0,2],'name']
0 张三
2 王二
#切片操作,两端都可以取到
df.loc[0:2,'name'] #注意,这里的0:2是标签,不是位置序列!!!
0 张三
1 李四
2 王二
删除company为空的行
df = df.dropna(axis=0, subset=["company"]) #删除指定列中有缺失值的那一行数据
把单个单元格里的二维df展开
df_by_net = df[['company','a']]
##1、先平均到各行
newvalues=np.dstack((np.repeat(df.b.values,list(map(len,df.a.values))),np.concatenate(df.a.values)))
df = pd.DataFrame(data=newvalues[0],columns=df.columns)
##2、再拆分为不同的列,把a列拆
result = df.a.apply(pd.Series)
result["b"] = df.b
df_by_net = result[['c','b']]
不同df保存到不同sheet(正常保存会被覆盖)
writer = pd.ExcelWriter(path)
df_init.to_excel(writer,sheet_name='c')
df1.to_excel(writer,sheet_name='a')
df2.to_excel(writer,sheet_name='b')
writer.save() #这一步一定要写,后面的sheet不会覆盖前面的
显示所有列(写在前面或者main里)
pd.set_option('display.max_columns', None)
显示所有行(写在前面或者main里)
pd.set_option('display.max_rows', None)
版权声明:本文为sinat_35058227原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。