Python 熊猫:如何更改列的所有值?

Python 熊猫:如何更改列的所有值?,python,database,pandas,Python,Database,Pandas,我有一个数据框,其中有一列名为“Date”,希望此列中的所有值都具有相同的值(仅限年份)。例如: City Date Paris 01/04/2004 Lisbon 01/09/2004 Madrid 2004 Pekin 31/2004 我想要的是: City Date Paris 2004 Lisbon 2004 Madrid 2004 Pekin 2004 这是我的密码: fr61_70xls = pd.ExcelFile('AM

我有一个数据框,其中有一列名为
“Date”
,希望此列中的所有值都具有相同的值(仅限年份)。例如:

City     Date
Paris    01/04/2004
Lisbon   01/09/2004
Madrid   2004
Pekin    31/2004
我想要的是:

City     Date
Paris    2004
Lisbon   2004
Madrid   2004
Pekin    2004
这是我的密码:

fr61_70xls = pd.ExcelFile('AMADEUS FRANCE 1961-1970.xlsx')

#Here we import the individual sheets and clean the sheets    
years=(['1961','1962','1963','1964','1965','1966','1967','1968','1969','1970'])

fr={}

header=(['City','Country','NACE','Cons','Last_year','Op_Rev_EUR_Last_avail_yr','BvD_Indep_Indic','GUO_Name','Legal_status','Date_of_incorporation','Legal_status_date'])

for year in years:
    # save every sheet in variable fr['1961'], fr['1962'] and so on
    fr[year]=fr61_70xls.parse(year,header=0,parse_cols=10)
    fr[year].columns=header
    # drop the entire Legal status date column
    fr[year]=fr[year].drop(['Legal_status_date','Date_of_incorporation'],axis=1)
    # drop every row where GUO Name is empty
    fr[year]=fr[year].dropna(axis=0,how='all',subset=[['GUO_Name']])
    fr[year]=fr[year].set_index(['GUO_Name','Date_of_incorporation'])

恰巧在我的数据帧中,例如称为
fr['1961']
Date\u of_incorporation
的值可以是任何东西(字符串、整数等),因此最好完全删除此列,然后将另一列仅包含年份的数据帧附加到另一列中。

正如@DSM指出的那样,您可以使用以下命令更直接地执行此操作:

或者使用extract(假设每个字符串中只有一组长度为4的数字):

lambda函数从
日期中获取输入,并将其转换为一年。
您可以(或许应该)更详细地将其写为:

def convert_to_year(date_in_some_format):
    date_as_string = str(date_in_some_format)  # cast to string
    year_as_string = date_in_some_format[-4:] # last four characters
    return int(year_as_string)

df['Date'] = df['Date'].apply(convert_to_year)

也许“Year”是这个列更好的名称…

您可以使用
apply

定义一个clean函数来删除美元和逗号,并将数据转换为float

def clean(x):
    x = x.replace("$", "").replace(",", "").replace(" ", "")
    return float(x)
接下来,在你的专栏上这样称呼它

data['Revenue'] = data['Revenue'].apply(clean)

或者,如果要在
apply
功能中使用
lambda
功能:

data['Revenue']=data['Revenue'].apply(lambda x:float(x.replace("$","").replace(",", "").replace(" ", "")))

字符串和数字取决于是否只有年份(如本例中的马德里),或者是否还有月份和日期(如北京和巴黎)。感谢您的回答,但它比这更复杂:有时值完全是其他值(如字符)。我认为完全删除此列,然后用年份添加一个新的列,或者用年份完全替换这些值更简单。@cbrunos请提供一个不起作用的示例?(但是你可以调整
转换为\u year
来处理它)…我同意更合适的名称应该是
df['year']
@cbrunos这对你来说应该很好:
对于fr中的year:df=fr[year];df['Year\u of_incorporation']=df['Date\u of_incorporation'].map(将_转换为_Year)
。这些天我经常做类似于
df[“Date”].str[-4:]的事情。astype(int)
@dmvianna或者
s.str.extract('(?P\d{4})
def clean(x):
    x = x.replace("$", "").replace(",", "").replace(" ", "")
    return float(x)
data['Revenue'] = data['Revenue'].apply(clean)
data['Revenue']=data['Revenue'].apply(lambda x:float(x.replace("$","").replace(",", "").replace(" ", "")))