簡體   English   中英

如何通過 input() 在 pandas Dataframe 中按內容查找索引?

[英]How to find an index by content via input() in pandas Dataframe?

我正在嘗試根據表的內容查找索引,在本例中,它是日期形式為 'd/m/YYYY' 或 'dd/mm/YYYY' 的字符串,表示 2 位數的日期和月份分別。 我正在尋找我想使用 input() 以交互方式查找的特定月份的第一天。

只要我對月份進行硬編碼,代碼就可以正常工作:

stream = open(sys.argv[1], 'r')
for path in stream:
    df = pd.read_csv('{}'.format(path))
    df['Idx'] = df['Date'].str.contains('^1/8/20\d{2} 0:00:00')
    index_month = df[df['Idx']==True].index.values.astype(int)[0]
    print('Index was found at {}'.format(month, index_month))

Output:

Index was fount at 19516
Index was found at 19527
...
...

但給

ValueError: cannot switch from automatic field numbering to manual field specification

當我使用input()查找相應的月份時(請參見下面的代碼)

print("Enter Month as number:")
month=input()

stream = open(sys.argv[1], 'r')
for path in stream:
    df = pd.read_csv('{}'.format(path))
    df['Idx'] = df['Date'].str.contains('^1/{}/20\d{2} 0:00:00'.format(month))
    index_month = df[df['Idx']==True].index.values.astype(int)[0]
    print('Index was found at {}'.format(month, index_month))

錯誤追溯到

df['Idx'] = df['Date'].str.contains('^1/{}/20\d{2} 0:00:00'.format(month))

是否可以通過這種方式解決,或者有更好的方法嗎?

你的問題就在這里:

'^1/{}/20\d{2} 0:00:00'

{2}由 str 的format方法解釋,因此您需要使用雙大括號將其轉義:

>>> month = 3
>>> re.search('^1/{}/20\d{{2}} 0:00:00'.format(month), '1/3/2020 0:00:00').group()
'1/3/2020 0:00:00'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM