Python 3.x 从日期框中提取行
我有一个数据框,如下图所示。我想提取年和月为“1395/01”的数据帧行。我使用了下面的代码,但我知道它不正确,因为我们可以在一系列字符串上使用字符串切片。有人能告诉我一种不使用嵌套for循环的方法吗Python 3.x 从日期框中提取行,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有一个数据框,如下图所示。我想提取年和月为“1395/01”的数据帧行。我使用了下面的代码,但我知道它不正确,因为我们可以在一系列字符串上使用字符串切片。有人能告诉我一种不使用嵌套for循环的方法吗 df[df['Date'][:7] == '1395/01'] 我可以在这里使用str.match: df[df['Date'].str.match(r'^1395/01')] 但一般来说,最好将日期存储为datetime,而不是文本。此外,1395年似乎有点可疑。我可以在这里使用str.ma
df[df['Date'][:7] == '1395/01']
我可以在这里使用
str.match
:
df[df['Date'].str.match(r'^1395/01')]
但一般来说,最好将日期存储为
datetime
,而不是文本。此外,1395年似乎有点可疑。我可以在这里使用str.match
:
df[df['Date'].str.match(r'^1395/01')]
但一般来说,最好将日期存储为
datetime
,而不是文本。此外,1395年似乎不确定。您可以使用loc和startswith来过滤数据帧
示例:
df = pd.DataFrame({'Date': ['1395/01/01', '1395/02/01', '1395/01/01', '1395/05/01']})
print(df)
Date
0 1395/01/01
1 1395/02/01
2 1395/01/01
3 1395/05/01
print(df.loc[df['Date'].str.startswith('1395/01'), :])
Date
0 1395/01/01
2 1395/01/01
解决方案:
df = pd.DataFrame({'Date': ['1395/01/01', '1395/02/01', '1395/01/01', '1395/05/01']})
print(df)
Date
0 1395/01/01
1 1395/02/01
2 1395/01/01
3 1395/05/01
print(df.loc[df['Date'].str.startswith('1395/01'), :])
Date
0 1395/01/01
2 1395/01/01
如果要提取所有行的年和月,可以使用str.slice:
df['Extracted Date'] = df['Date'].str.slice(0, 7)
print(df)
Date Extracted Date
0 1395/01/01 1395/01
1 1395/02/01 1395/02
2 1395/01/01 1395/01
3 1395/05/01 1395/05
您可以使用loc和startswith来过滤数据帧 示例:
df = pd.DataFrame({'Date': ['1395/01/01', '1395/02/01', '1395/01/01', '1395/05/01']})
print(df)
Date
0 1395/01/01
1 1395/02/01
2 1395/01/01
3 1395/05/01
print(df.loc[df['Date'].str.startswith('1395/01'), :])
Date
0 1395/01/01
2 1395/01/01
解决方案:
df = pd.DataFrame({'Date': ['1395/01/01', '1395/02/01', '1395/01/01', '1395/05/01']})
print(df)
Date
0 1395/01/01
1 1395/02/01
2 1395/01/01
3 1395/05/01
print(df.loc[df['Date'].str.startswith('1395/01'), :])
Date
0 1395/01/01
2 1395/01/01
如果要提取所有行的年和月,可以使用str.slice:
df['Extracted Date'] = df['Date'].str.slice(0, 7)
print(df)
Date Extracted Date
0 1395/01/01 1395/01
1 1395/02/01 1395/02
2 1395/01/01 1395/01
3 1395/05/01 1395/05