创建 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.
我有这个数据框:
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
谢谢!
使用
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
ref2(这看起来甚至更好,我在完成代码之前从未参考过)
警告的最后一句话:没有人应该像我一样回答或尝试回答问题,或者已经这样做了,(我认为)- personable/sociable/'wafly' 也没有无关紧要的信息他们说(有些人可能确实无关紧要,或者可能有帮助,idk)所以如果其他人看到我的回答(idk),我可能会因此而被打分。
但我想让或让您了解以及如何按照您想要(并询问)的方式使用和使用布尔值,而不需要我个人也不赞成的 groupby。所以上面的代码 imo 更好。 (但您可以结合使用 groupby 和布尔值,由您决定)
最后一件事,如 ref0 中的 @edchum(见下文)和其他人所说,尝试迭代 dframe 是低效的,因为这已经为您完成并且在 pandas 中是固有的。
(我不是第一个说和重复我学到的东西)但凭直觉我已经知道了。看到这个很有趣redit post for eg.