创建 returns 两个文件的函数

Create function that returns two files

我有这个数据框:

data = {'X_1': [1, 10, 2, 5, 0], 'X_2': [11, 30, 16, 31, 31], 'X_3': ['Yes', 'No', 'No', 'Yes', 'No']}  
df = pd.DataFrame(data)  
print(df) 

   X_1  X_2  X_3
0    1   11  Yes
1   10   30   No
2    2   16   No
3    5   31  Yes
4    0   31   No

我想创建一个函数来接收数据帧和 returns 两个 xlsx 文件作为参数。一个包含变量 X_3 的值等于 'No' 的行,另一个包含 X_3 的值等于 'Yes'.[=15 的行=]

我正尝试这样做,但我不知道如何创建 return 我需要的两个文件的函数。

def preprocess (df):
    for i in X_3:
        if df.loc[data['X_3'] != 'Yes']:
            return data, data_2

我期望的 return xlsx 文件是这样的:

xlsx 文件 #1:

   X_1  X_2  X_3
1   10   30   No
2    2   16   No
4    0   31   No

xlsx 文件#2:

   X_1  X_2  X_3
0    1   11  Yes
3    5   31  Yes

谢谢!

使用页面的任何一个好方法,那里有3个很好的方法。 :

import pandas as pd
data = {'X_1': [1, 10, 2, 5, 0], 'X_2': [11, 30, 16, 31, 31], 'X_3': ['Yes', 'No', 'No', 'Yes', 'No']}
df = pd.DataFrame(data)
#print(df)

def mysplit (a):
    df1 = df[df['X_3'] == 'Yes']
    df2 = df[df['X_3'] == 'No']
    print(df1,file=open("file_a.xls", "a", encoding="utf-8"))
    print(df2,file=open("file_b.xls", "a", encoding="utf-8"))
    return
mysplit(df)

我知道你说的是 xlsx,但原理也适用于 excel writer。

帕特丽夏,

对于 pandas 中的布尔索引或查询,我在过去 24 天在这里学到了很多东西(但不是这个。这是在重要的一天外出回家后 1 小时内完成的)。

dataquery= df[(df['X_3'] == 'Yes') | (df['X_3'] == 'Maybe')]

使用 &(表示“和”)和 | (对于“或”)并确保“(”和“)”为布尔逻辑工作做好了安排,我相信你现在已经在没有我的情况下解决了,但只是为了完成而发帖。

对于像你我这样的 nb 来说,如此完整的“有趣 - 测试代码”是:

import pandas as pd
data = {'X_1': [1, 10, 2, 5, 0], 'X_2': [11, 30, 16, 31, 31], 'X_3': ['Yes', 'Maybe', 'No', 'Yes', 'No']}
df = pd.DataFrame(data)
print("Hello start")
print(df)
def mysplit4 (dataframe):

    print("hello 1")
    #def mysplit (a):
    df1 = df[df['X_3'] == 'Yes']
    df2 = df[df['X_3'] == 'No']
    dataquery= df[(df['X_3'] == 'Yes') | (df['X_3'] == 'Maybe')]
    print(df1)
    print("hello 2")
    print(df2)
    print("hello 3")
    print(dataquery)
    print("hello 4")
    return

mysplit4(df)

ref0

<--- 一切都很好,但这对我来说是 Tick/coin 下降:)

ref2(这看起来甚至更好,我在完成代码之前从未参考过)

警告的最后一句话:没有人应该像我一样回答或尝试回答问题,或者已经这样做了,(我认为)- personable/sociable/'wafly' 也没有无关紧要的信息他们说(有些人可能确实无关紧要,或者可能有帮助,idk)所以如果其他人看到我的回答(idk),我可能会因此而被打分。

但我想让或让您了解以及如何按照您想要(并询问)的方式使用和使用布尔值,而不需要我个人也不赞成的 groupby。所以上面的代码 imo 更好。 (但您可以结合使用 groupby 和布尔值,由您决定)

最后一件事,如 ref0 中的 @edchum(见下文)和其他人所说,尝试迭代 dframe 是低效的,因为这已经为您完成并且在 pandas 中是固有的。

(我不是第一个说和重复我学到的东西)但凭直觉我已经知道了。看到这个很有趣redit post for eg.