簡體   English   中英

使用反斜杠將行分成多行以提高可讀性

[英]using backslash to break lines into multiple lines for readability

我不能在 Python 中做這樣的事情,這讓我很煩惱。

df['File name'].replace(False, attachment_name, inplace=True) \
               .replace(True, np.nan, inplace=True)

而不是這個

df['File name'].replace(False, attachment_name, inplace=True)
df['File name'].replace(True, np.nan, inplace=True)

比我聰明的人可以糾正我嗎

在 Python 中,在行尾放置一個反斜杠會創建一個續行,這意味着“忽略換行符和下一行的縮進”。 所以,代碼:

object.do_something(False) \
      .do_something(True)

將被解釋為

object.do_something(False).do_something(True)

現在,這可能正是您想要做的。 這通常是您想用行延續來做的——您想將機器的一行分成幾行供人類閱讀。 所以,你的代碼實際做的是:

  1. 使用指定的參數調用 df 的 replace() 方法,並保留 replace 返回的值。
  2. 使用指定的參數調用任何返回值的 replace() 方法。

所以,這取決於 df.replace 的工作原理。 鑒於名稱和參數,我將假設 df 是一個 pandas.DataFrame 對象。 pandas.DataFrame.replace 的文檔說它返回調用者(即 df)並且 inplace 參數沒有提到更改返回值。 然而,在交互式 shell 中對此進行測試,我們看到:

>>> df=pandas.DataFrame()
>>> df.replace()
Empty DataFrame
Columns: []
Index: []
>>> df.replace(inplace=True)
>>> type(df.replace())
<class 'pandas.core.frame.DataFrame'>
>>> type(df.replace(inplace=True))
<class 'NoneType'>

因此,當我們到達第二行時,我們並沒有調用 DataFrame 的 replace 方法,而是試圖調用 None 的 replace 方法——但是 None 沒有 replace 方法,因此 Python 拋出異常。 這樣做有多種原因,但他們絕對應該記錄 inplace=True 將更改返回值。

那我們怎么得到你想要的呢? 嗯,最簡單的方法是確保 df.replace 返回一個帶有 replace 方法的值,我們可以調用並理解它。 幸運的是,我們已經找到了一種方法 - 不使用 inplace!

df = df.replace(False, attachment_name) \
       .replace(True, np.nan)

使用默認的 inplace=False,我們得到一個 pandas.DataFrame 類型的返回值,它有一個 replace 方法,它將接受這些參數作為有效參數。 但是,我們現在沒有為 df 分配任何東西 - 所以我們必須添加它。

您可能想在最終替換時設置 inplace=True。 這是行不通的,因為最終的替換不是在 df 上調用的——它是在 df.replace 的返回值上調用的,它是一個不同的對象。 它不會引發異常,但無法更改 df 的值。

如果你不替換值,你可以這樣inplace

df['File name'] = df['File name'].replace(False, attachment_name).replace(True, np.nan)

暫無
暫無

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

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