2 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果您想要單個(gè)目錄的行:
數(shù)據(jù):
注意正在使用的列名是file_path_lists,但問(wèn)題截圖中的列名是col1
from pathlib import Path
from ast import literal_eval
df = pd.read_excel('test.xlsx')
將行 from和each轉(zhuǎn)換str為單獨(dú)的行:listexplodelist
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
轉(zhuǎn)換為pathlib對(duì)象:
pathlib標(biāo)準(zhǔn)庫(kù)的一部分,應(yīng)該使用而不是os. Python 3 的 pathlib 模塊:馴服文件系統(tǒng)
df2.file_path_lists = df2.file_path_lists.apply(Path)
print(df2.file_path_lists[0])
>>> WindowsPath('C:/tmp_patients/Pat_MAV_BE_B01_')
現(xiàn)在每個(gè)都是一個(gè)pathlib對(duì)象。
訪(fǎng)問(wèn)每個(gè)目錄:
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)
如果您想要行l(wèi)ists而不是每個(gè)目錄的行:
跳過(guò).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

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的示例輸入具有看起來(lái)像數(shù)組的字符串。我認(rèn)為read_excel不會(huì)那樣做,所以你不需要.apply(literal_eval)下面的電話(huà)。
假設(shè)您使用的是 pandas 0.25 或更高版本,因此您可以使用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
添加回答
舉報(bào)