簡體   English   中英

如何使用相對路徑打開 pandas data_folder 中的文件?

[英]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_csvpd.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,並為您的環境調整文件名和位置,並檢查縮進。

- - 編碼:utf-8 - -

""" 創建於 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.

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