[英]How to open my files in data_folder with pandas using relative path?
我正在使用 pandas 並需要讀取一些 csv 文件,結構是這樣的:
文件夾/folder2/scripts_folder/script.py
文件夾/folder2/data_folder/data.csv
如何從scripts_folder
中的腳本打開data.csv
文件?
我試過這個:
absolute_path = os.path.abspath(os.path.dirname('data.csv'))
pandas.read_csv(absolute_path + '/data.csv')
我收到此錯誤:
File folder/folder2/data_folder/data.csv does not exist
嘗試
import pandas as pd
pd.read_csv("../data_folder/data.csv")
Pandas 將從您當前的 python 文件所在的位置開始查找。 因此,您可以使用“..”從當前目錄移動到數據所在的位置,例如:
pd.read_csv('../../../data_folder/data.csv')
將向上 3 級,然后進入 data_folder(假設它在那里)或
pd.read_csv('data_folder/data.csv')
假設您的 data_folder 與您的 .py 文件位於同一目錄中。
您可以使用__file__
屬性:
import os
import pandas as pd
df = pd.read_csv(os.path.join(os.path.dirname(__file__), "../data_folder/data.csv"))
對於非 Windows 用戶:
import pandas as pd
import os
os.chdir("../data_folder")
df = pd.read_csv("data.csv")
對於 Windows 用戶:
import pandas as pd
df = pd.read_csv(r"C:\data_folder\data.csv")
將位置提供給熊貓數據框時,上面位置中的前綴 r 可以節省時間。
# script.py
current_file = os.path.abspath(os.path.dirname(__file__)) #older/folder2/scripts_folder
#csv_filename
csv_filename = os.path.join(current_file, '../data_folder/data.csv')
使用f-strings保持整潔:
import os
import pandas as pd
data_files = '../data_folder/'
csv_name = 'data.csv'
pd.read_csv(f"{data_files}{csv_name}")
當您使用read_csv
或pd.read_csv
時,使用 python 或 pandas 時,它們都會查看當前工作目錄,默認情況下是 python 進程開始的位置。 所以你需要使用os
模塊來chdir()
並從那里獲取它。
import pandas as pd
import os
print(os.getcwd())
os.chdir("D:/01Coding/Python/data_sets/myowndata")
print(os.getcwd())
df = pd.read_csv('data.csv',nrows=10)
print(df.head())
如果您想保持整潔,那么我建議您分別分配路徑和文件,然后閱讀:
path = 'C:/Users/username/Documents/folder'
file_name = 'file_name.xlsx'
file=pd.read_excel(f"{path}{file_name}")
我也在尋找相對路徑版本,這工作正常。 請注意,當運行(Spyder 3.6)時,您將看到(unicode error)'unicodeescape'編解碼器無法解碼結束三引號處的字節。 刪除有問題的注釋行 14 和 15,並為您的環境調整文件名和位置,並檢查縮進。
""" 創建於 2020 年 1 月 24 日星期五 12:12:40
資料來源: 在 Windows 7 上從 F: 驅動器將 .csv 讀入 pandas
演示:通過指定相對路徑加載不在 CWD 中的 csv - windows 版本
@作者:道格
從 CWD C:\Users\Doug\.spyder-py3\Data Camp\pandas
我們將加載文件
C:/Users/Doug/.spyder-py3/Data Camp/Cleaning/g1803.csv
"""
import csv
trainData2 = []
with open(r'../Cleaning/g1803.csv', 'r') as train2Csv:
trainReader2 = csv.reader(train2Csv, delimiter=',', quotechar='"')
for row in trainReader2:
trainData2.append(row)
print(trainData2)
您始終可以使用~
指向您的主目錄,然后您可以參考您的數據文件夾。
import pandas as pd
df = pd.read_csv("~/mydata/data.csv")
對於您的情況,應該是這樣的
import pandas as pd
df = pd.read_csv("~/folder/folder2/data_folder/data.csv")
您還可以將data
目錄設置為前綴
import pandas as pd
DATA_DIR = "~/folder/folder2/data_folder/"
df = pd.read_csv(DATA_DIR+"data.csv")
正如@nikos-tavoularis 所說,您可以利用f-strings
import pandas as pd
DATA_DIR = "~/folder/folder2/data_folder/"
FILE_NAME = "data.csv"
df = pd.read_csv(f"{DATA_DIR}{FILE_NAME}")
import pandas as pd
df = pd.read_csv('C:/data_folder/data.csv')
這個鏈接在這里回答它。 在python項目中使用相對路徑讀取文件
基本上使用pathlib
中的Path
,您將在 script.py 中執行以下操作
from pathlib import Path
path = Path(__file__).parent / "../data_folder/data.csv"
pd.read_csv(path)
你可以試試這個。
df = pd.read_csv("E:\working datasets\sales.csv")
print(df.head())
import os
s_path = os.getcwd()
# s_path = "...folder/folder2/scripts_folder/script.py"
s_path = s_path.split('/')
print(s_path)
# [,..., 'folder', 'folder2', 'scripts_folder', 'script.py']
d_path = s_path[:len(s_path)-2] + ['data_folder', 'data.csv']
print(os.path.join(*d_path))
# ...folder/folder2/data_folder/data.csv```
您可以使用.
代表現在的工作路徑。
#Linux
df = pd.read_csv("../data_folder/data.csv")
#Wins
df = pd.read_csv("..\\data_folder\\data.csv")
試試這個:打開一個新的終端窗口。 將文件(您希望 Pandas 讀取)拖放到該終端窗口中。 這將在一行中返回文件的完整地址。 將該行復制並粘貼到 read_csv 命令中,如下所示:
import pandas as pd
pd.read_csv("the path returned by terminal")
而已。
只需將您的“/”替換為“”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.