Dataframe警告:在python中设置CopyWarning

Dataframe警告:在python中设置CopyWarning,python,pandas,dataframe,Python,Pandas,Dataframe,正在处理来自的文件 获取如下输出: 31012017,1,1135765,12,10.8536000, 31012017,1,1135762,12,10.8543000, 31012017,1,1135760,12,10.6599000, 31012017,1,1135759,12,10.6554000, 31012017,1,1135763,12,10.8536000, .. .. .. 我试过使用下面的代码,但得到以下警告 代码: import pandas import numpy as

正在处理来自的文件

获取如下输出:
31012017,1,1135765,12,10.8536000,
31012017,1,1135762,12,10.8543000,
31012017,1,1135760,12,10.6599000,
31012017,1,1135759,12,10.6554000,
31012017,1,1135763,12,10.8536000,
..
..
..

我试过使用下面的代码,但得到以下警告

代码:

import pandas
import numpy as np

#Sample file for NAV0.txt can be downloaded from url: http://portal.amfiindia.com/spages/NAV0.txt
#creating pandas with selected columns
df=pandas.read_table('NAV0.txt',sep=';',usecols=['Date','Scheme Code','Net Asset Value'])

#converting column with name 'Scheme Code' to digit to remove string part
fil_df=df[df['Scheme Code'].apply(lambda x : str(x).isdigit())]

#converting column with name 'Net Asset value' to numberic and set each value with 7 decimal places 
fil_df['Net Asset Value']=pandas.to_numeric(fil_df['Net Asset Value'],errors='coerce')
fil_df['Net Asset Value']=fil_df['Net Asset Value'].map(lambda x: '%2.7f' % x)


#Formating Date column as YYYMMDD
fil_df['Date']=pandas.to_datetime(fil_df['Date']).dt.strftime('%d%m%Y')

#adding extra column in dataframe
fil_df['ser1']=1
fil_df['ser2']=1
fil_df['period']=12
fil_df['lcol']=''
fil_df=fil_df[['Date','ser1','ser2','Scheme Code','period','Net Asset Value','lcol']]

#Converting datafile to csv
fil_df.to_csv('NAV_1.csv',index=False,header=None)
fil_df.dtypes
错误:

import pandas
import numpy as np

#Sample file for NAV0.txt can be downloaded from url: http://portal.amfiindia.com/spages/NAV0.txt
#creating pandas with selected columns
df=pandas.read_table('NAV0.txt',sep=';',usecols=['Date','Scheme Code','Net Asset Value'])

#converting column with name 'Scheme Code' to digit to remove string part
fil_df=df[df['Scheme Code'].apply(lambda x : str(x).isdigit())]

#converting column with name 'Net Asset value' to numberic and set each value with 7 decimal places 
fil_df['Net Asset Value']=pandas.to_numeric(fil_df['Net Asset Value'],errors='coerce')
fil_df['Net Asset Value']=fil_df['Net Asset Value'].map(lambda x: '%2.7f' % x)


#Formating Date column as YYYMMDD
fil_df['Date']=pandas.to_datetime(fil_df['Date']).dt.strftime('%d%m%Y')

#adding extra column in dataframe
fil_df['ser1']=1
fil_df['ser2']=1
fil_df['period']=12
fil_df['lcol']=''
fil_df=fil_df[['Date','ser1','ser2','Scheme Code','period','Net Asset Value','lcol']]

#Converting datafile to csv
fil_df.to_csv('NAV_1.csv',index=False,header=None)
fil_df.dtypes
c:\users\administrator\appdata\local\programs\python\python35-32\lib\site packages\ipykernel\uuuuuu main\uuuuuu.py:12: SettingWithCopyWarning:正在尝试在副本上设置值 从数据帧切片。尝试使用.loc[行索引器、列索引器]= 取而代之的是价值观

c:\users\administrator\appdata\local\programs\python\python35-32\lib\site packages\ipykernel\uuuuu main\uuuuuu.py:13: SettingWithCopyWarning:正在尝试在副本上设置值 从数据帧切片。尝试使用.loc[行索引器、列索引器]= 取而代之的是价值观

c:\users\administrator\appdata\local\programs\python\python35-32\lib\site packages\ipykernel\uuuuu main\uuuuuu.py:17: SettingWithCopyWarning:正在尝试在副本上设置值 从数据帧切片。尝试使用.loc[行索引器、列索引器]= 取而代之的是价值观

c:\users\administrator\appdata\local\programs\python\python35-32\lib\site packages\ipykernel\uuuuu main\uuuuuu.py:20: SettingWithCopyWarning:正在尝试在副本上设置值 从数据帧切片。尝试使用.loc[行索引器、列索引器]= 取而代之的是价值观

c:\users\administrator\appdata\local\programs\python\python35-32\lib\site packages\ipykernel\uuuuu main\uuuuuu.py:21: SettingWithCopyWarning:正在尝试在副本上设置值 从数据帧切片。尝试使用.loc[行索引器、列索引器]= 取而代之的是价值观

c:\users\administrator\appdata\local\programs\python\python35-32\lib\site packages\ipykernel\uuuuuu main\uuuuuu.py:22: SettingWithCopyWarning:正在尝试在副本上设置值 从数据帧切片。尝试使用.loc[行索引器、列索引器]= 取而代之的是价值观

c:\users\administrator\appdata\local\programs\python\python35-32\lib\site packages\ipykernel\uuuuu main\uuuuuu.py:23: SettingWithCopyWarning:正在尝试在副本上设置值 从数据帧切片。尝试使用.loc[行索引器、列索引器]= 取而代之的是价值观

Csv文件按预期生成,但如何克服此警告? 我试过使用
fil_df.loc[pandas.to_numeric(fil_df['Net Asset Value',errors='improve').map(lambda x:'%2.7f'%x]

但这没用。
非常感谢您的帮助。

我想您需要补充:


如果您稍后修改
fil_df
中的值,您会发现修改不会传播回原始数据(
df
),而且Pandas会发出警告。

从这家伙的2017年编辑中向数据框添加新列,这将触及问题的核心。基本上,路径是使用
。分配('newCol'=enumerableValues)

如果您知道代码在做什么,您可以使用

pd.options.mode.chained_assignment = None  # default='warn'

在您的代码中禁用此警告。

我认为您需要
copy
-
fil_df=df[df['Scheme code'].apply(lambda x:str(x).isdigit())].copy()
我在上面一行没有收到警告。来自这一行的警告:
fil_df['Net Asset Value']=pandas.to.\u numeric(fil_df['Net Asset Value'],errors='concurve')
是的,但问题在注释中。如果添加副本,仍然存在问题?是的,我尝试了复制()仍然相同problem@jezrael谢谢!它能用。上次我把它放在另一行。