Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 从日期框中提取行_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 3.x 从日期框中提取行

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

我有一个数据框,如下图所示。我想提取年和月为“1395/01”的数据帧行。我使用了下面的代码,但我知道它不正确,因为我们可以在一系列字符串上使用字符串切片。有人能告诉我一种不使用嵌套for循环的方法吗

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