এই ফাংশনটি কলামের ডেটা ধরণের তারিখকে সেট করবে, যদি কলামের কোনও মান রেজেক্স প্যাটার্নের সাথে মেলে (\ d {4} - \ d {2} - \ d {2}) + (যেমন 2019-01-01 )। সমস্ত পান্ডস ডেটা ফ্রেম কলাম এবং ফিল্টারটি কীভাবে মাস্কটি সেট এবং প্রয়োগ করতে সহায়তা করেছে সে সম্পর্কে স্ট্রিংয়ের জন্য কীভাবে অনুসন্ধান করবেন সে সম্পর্কে এই উত্তরের কৃতিত্ব ।
def presume_date(dataframe):
""" Set datetime by presuming any date values in the column
indicates that the column data type should be datetime.
Args:
dataframe: Pandas dataframe.
Returns:
Pandas dataframe.
Raises:
None
"""
df = dataframe.copy()
mask = dataframe.astype(str).apply(lambda x: x.str.match(
r'(\d{4}-\d{2}-\d{2})+').any())
df_dates = df.loc[:, mask].apply(pd.to_datetime, errors='coerce')
for col in df_dates.columns:
df[col] = df_dates[col]
return df
ব্যবহারের পরামর্শ থেকে কাজ করা dateutil
, এটি সাহায্য করতে পারে। এটি এখনও এই ধারণায় কাজ করছে যে কোনও কলামে যদি কোনও তারিখের মতো মান থাকে তবে কলামটি একটি তারিখের সময় হওয়া উচিত। আমি বিভিন্ন ডেটা ফ্রেম পুনরাবৃত্তি পদ্ধতিগুলি দ্রুত যা বিবেচনা করার চেষ্টা করেছি। আমি মনে করি পান্ডাসের ডেটা ফ্রেমে সারিগুলিতে কীভাবে পুনরাবৃত্তি করা যায় সে সম্পর্কে এই উত্তরটি তাদের বর্ণনা করার জন্য একটি ভাল কাজ করেছে।
দ্রষ্টব্য যে dateutil.parser
কোনও বছর বা দিনের মান সহ 'ডিসেম্বর' বা 'নভেম্বর 2019' এর মতো যে কোনও স্ট্রিংয়ের জন্য বর্তমান দিন বা বছর ব্যবহার করবে।
import pandas as pd
import datetime
from dateutil.parser import parse
df = pd.DataFrame(columns=['are_you_a_date','no_dates_here'])
df = df.append(pd.Series({'are_you_a_date':'December 2015','no_dates_here':'just a string'}), ignore_index=True)
df = df.append(pd.Series({'are_you_a_date':'February 27 2018','no_dates_here':'just a string'}), ignore_index=True)
df = df.append(pd.Series({'are_you_a_date':'May 2017 12','no_dates_here':'just a string'}), ignore_index=True)
df = df.append(pd.Series({'are_you_a_date':'2017-05-21','no_dates_here':'just a string'}), ignore_index=True)
df = df.append(pd.Series({'are_you_a_date':None,'no_dates_here':'just a string'}), ignore_index=True)
df = df.append(pd.Series({'are_you_a_date':'some_string','no_dates_here':'just a string'}), ignore_index=True)
df = df.append(pd.Series({'are_you_a_date':'Processed: 2019/01/25','no_dates_here':'just a string'}), ignore_index=True)
df = df.append(pd.Series({'are_you_a_date':'December','no_dates_here':'just a string'}), ignore_index=True)
def parse_dates(x):
try:
return parse(x,fuzzy=True)
except ValueError:
return ''
except TypeError:
return ''
list_of_datetime_columns = []
for row in df:
if any([isinstance(parse_dates(row[0]),
datetime.datetime) for row in df[[row]].values]):
list_of_datetime_columns.append(row)
df_dates = df.loc[:, list_of_datetime_columns].apply(pd.to_datetime, errors='coerce')
for col in list_of_datetime_columns:
df[col] = df_dates[col]
আপনি যদি ডাটাটাইম মানগুলি থেকে ব্যবহার dateutil.parser
করতে চান তবে আপনি এটি যুক্ত করতে পারেন:
for col in list_of_datetime_columns:
df[col] = df[col].apply(lambda x: parse_dates(x))
datetime.datetime
বাpandas._libs.tslibs.timestamps.Timestamp
? যদি পূর্বের আমার সুপারিশটি হ'ল ডেটটাইম যা কিছু তৈরি হয়েছে তা পরিবর্তনের জন্য এটিpandas
আরও ভালভাবে পরিচালনা করে।