[英]Extract filepaths from pandas DataFrame python
我有一個Excel文件,其中包含列中文件夾的文件路徑。 可能有多個文件路徑存儲在一行中。 我可以將excel文件讀成像這樣的pandas。
現在我要做的是DataFrame df
迭代我的pandas DataFrame df
並提取存儲的目錄,這樣我就可以將它們用作其他函數的輸入目錄。
如果我使用iloc訪問數據框中的行,我會得到一個類似於str
對象,而我想要的是每個類型list
行,以便我可以遍歷它。
我的數據框中變量格式的一個示例。
import pandas as pd
path_1 = '[\'C:\\\\tmp_patients\\\\Pat_MAV_BE_B01_\']'
path_2 = '[\'C:\\\\tmp_patients\\\\Pat_MAV_B16\', \'C:\\\\tmp_patients\\\\Pat_MAV_BE_B16_2017-06-30_08-49-28\']'
d = {'col1': [path_1, path_2]}
df = pd.DataFrame(data=d)
#or read directly excel
# df= pd.read_excel(filepath_to_excel)
for idx in range(len(df)):
paths = df['col1'].iloc[idx]
for a_single_path in paths:
print(a_single_path)
# todo: process all the files found at the location "a single path" with os.walk
file_path_lists
,但問題屏幕截圖中列的名稱是col1
from pathlib import Path
from ast import literal_eval
df = pd.read_excel('test.xlsx')
str
來list
和explode
的每個list
到一個單獨的一行: df.file_path_lists = df.file_path_lists.apply(literal_eval)
df2 = pd.DataFrame(df.explode('file_path_lists'))
df2.dropna(inplace=True)
print(df2.file_path_lists[0])
>>> 'C:\\tmp_patients\\Pat_MAV_BE_B01_'
str
pathlib
對象: os
。 Python 3的pathlib模塊:馴服文件系統 df2.file_path_lists = df2.file_path_lists.apply(Path)
print(df2.file_path_lists[0])
>>> WindowsPath('C:/tmp_patients/Pat_MAV_BE_B01_')
pathlib
對象。 for dir in df2.file_path_lists:
print(dir)
print(type(dir))
>>> C:\tmp_patients\Pat_MAV_BE_B01_
<class 'pathlib.WindowsPath'>
C:\tmp_patients\Pat_MAV_B16
<class 'pathlib.WindowsPath'>
C:\tmp_patients\Pat_MAV_BE_B16_2017-06-30_08-49-28
<class 'pathlib.WindowsPath'>
for dir in df2.file_path_lists:
patient_files = list(dir.glob('*.*')) # use .rglob if there are subdirs
print(patient_files)
lists
行而不是每個目錄的行: .explode
df = pd.read_excel('test.xlsx')
df.file_path_lists = df.file_path_lists.apply(literal_eval)
print(type(df.file_path_lists[0]))
>>> list
for row in df.file_path_lists: # iterate the row
for x in row: # iterate the list inside the row
print(x)
>>> C:\tmp_patients\Pat_MAV_BE_B01_
C:\tmp_patients\Pat_MAV_B16
C:\tmp_patients\Pat_MAV_BE_B16_2017-06-30_08-49-28
您的示例輸入具有看起來像數組的字符串。 我認為read_excel
不會這樣做所以你不需要下面的.apply(literal_eval)
調用。
假設您使用的是0.25或更高版本的pandas,那么您可以使用explode
:
from ast import literal_eval
path_1 = "['C:\\\\develop\\\\python-util-script\\\\Pat_MAV_B01']"
path_2 = "['C:\\\\develop\\\\python-util-script\\\\Pat_MAV_B16', 'C:\\\\develop\\\\python-util-script\\\\Pat_MAV_BE_B16_2017-06-30_08-49-28']"
d = {'col1': [path_1, path_2]}
df = pd.DataFrame(data=d)
df['col1'].apply(literal_eval).explode()
輸出:
0 C:\develop\python-util-script\Pat_MAV_B01
1 C:\develop\python-util-script\Pat_MAV_B16
1 C:\develop\python-util-script\Pat_MAV_BE_B16_2...
Name: col1, dtype: object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.