1.pandas读取csv文件并设置第一列为索引
obj=pd.read_csv(‘testdata.csv‘,index_col=0,usecols=[1,2,3])
2.由于办公系统加密原因,我不能用pandas直接读取csv或者excel,只能用xlwings操作本地excel读取,所以我不能直接创建dataframe,必须先读取全部数据,然后做填充,在创建dataframe,再转置,为什么要转置,因为需求要求的。因为csv文件第一个格没有数据,所以,读出来,默认给了None,但是用None创建dataframe,后面没办法引用这列,用df[None]或者df['None']都不行,所以我就想填充一个字符串,这样后面转成dataFrame就有列名了,试了一下,确实管用,然后再设置第一行为列名,再删除第一行数据(转为列名了已经,所以删掉),最后转置,代码如下:
- def create_dataframe_by_xw(excel_f,axis=0):
- app = xw.App(visible=False, add_book=False)
- wb = app.books.open(excel_f)
- ws = wb.sheets.active
- sht = wb.sheets[0]
- all_data = sht.range('a1').expand().value
-
- app.quit()
- if axis == 0:
- df = pd.DataFrame(all_data[1:],columns=all_data[0])
- else:
- all_data[0][0] = 'signals'
- df = pd.DataFrame(all_data,columns=all_data[0])
- df.drop([0], inplace=True) # 删除df的第一行多余的数据
- df = df.set_index('signals')
-
- df = df.T
- return df
3.把非数值类型的数据转成数值类型,当然,前提它可以转,如果是字母,文字等不行。
data=data.apply(pd.to_numeric,errors='coerce')
当然也可以用df['xxx'].astype(),但是这个方法遇到字母,文字会报错,pd.to_numeric则不会。