请问有没有人知道如何用pandas将第二列以反斜杆为分隔符,将其划分为多个列,以及如何提取第四列中的数字。
import re
import pandas as pd
df = pd.DataFrame(columns = 'info,voet_count'.split(','))
df.loc[len(df)] = ['余华/江南出版社/1990-27/20元','fasdf12345']
print(df)
df[['作者','出版社','出版时间','售价']] =[x.split('/') for x in df['info'].tolist()]
df['voet_count'] = [re.search('\d+',x).group() for x in df['voet_count'].tolist()]
df1 = df[['作者','出版社','出版时间','售价','voet_count']]
print('------------------------')
print(df1)
- excel_writer : string or ExcelWriter object File path or existing ExcelWriter目标路径
- sheet_name : string, default ‘Sheet1' Name of sheet which will contain DataFrame,填充excel的第几页
- na_rep : string, default ”,Missing data representation 缺失值填充
- float_format : 字符串,默认None,格式化浮点数的字符串
- columns : sequence, optional,Columns to write 选择输出的的列。
- header : 布尔或字符串列表,默认为Ture。写出列名。如果给定字符串列表,则假定它是列名称的别名
- index : boolean, default True,Write row names (index) 索引(False表示不写入)
- index_label : 如果需要,可以使用索引列的列标签。如果没有给出,标题和索引为true,则使用索引名称。如果数据文件使用多索引,则需使用序列。
- startrow :左上角的单元格行来转储数据框
- startcol :左上角的单元格列转储数据帧
- engine : 字符串,默认没有使用写引擎 - 您也可以通过选项io.excel.xlsx.writer,io.excel.xls.writer和io.excel.xlsm.writer进行设置。
- merge_cells : 布尔,默认为Ture,编码生成的excel文件。 只有xlwt需要,其他编写者本地支持unicode。
- encoding: string, default None encoding of the resulting excel file. Only necessary for xlwt,other writers support unicode natively.
- inf_rep : 字符串,默认“正”。无穷大的表示(在Excel中不存在无穷大的本地表示)
- freeze_panes :整数的元组(长度2),默认为None。指定要冻结的基于1的最底部行和最右边的列
首先读入需要处理的数据,假设数据路径为"data.csv",然后用pandas的read_csv函数将其读入成DataFrame的形式:
import pandas as pd
df = pd.read_csv("data.csv",header=None)
根据题目要求,需要将第二列以反斜杆为分隔符,将其划分为多个列。我们可以用pandas的str.split函数来实现:
df[[2,3,4]] = df[1].str.split(pat='\\',n=-1,expand=True)
以上代码将第二列以反斜杆为分隔符,分为三列,并将这三列分别赋值给第三列、第四列和第五列。
接着,需要提取第四列中的数字。我们可以用pandas的str.extract函数来实现:
df[4] = df[4].str.extract('(\d+)')
以上代码提取了第四列中的数字,并替换原来的值。
最后,将处理好的数据保存到Excel文件中,可以用pandas的to_excel函数实现:
df.to_excel('output.xlsx', index=False, header=False)
以上代码将DataFrame对象输出到output.xlsx文件中,不包含列名和索引列。如果需要列名和索引列,把参数header和index都改为True即可。