如何通过将数据框的选定列传递给另一个函数来使用df.apply()

时间:2019-03-20 05:03:46

标签: python pandas dataframe

我有一个包含多列的数据框。数据框中的两列是table_name和column_name。我需要检查SQL Server数据库的table_name中的column_name是否可用。

现在,我有一个用于此功能的check_column_existence()函数,如果使用传统的读取csv文件并调用该函数的传统方法,该函数似乎可以正常工作

<FlatList
    scrollEnabled={this.state.scrollEnable}
    style={s}
    ref={ref => this.scrollView = ref}
    onContentSizeChange={(contentWidth, contentHeight) => { 
        this.scrollView.scrollToEnd({ animated: true }); }}
    ListHeaderComponent={<View>{this.state.TempView}</View>}
    data={this.state.MainScrollView}
    renderItem={({ item }) => (
        <View>{item}</View>
    )}
    keyExtractor={(item, index) => index.toString()}
/>

使用我当前的方法更新了此问题。请建议是否有更快的方法来达到目的。如果可能的话,我应该如何在这种情况下使用df.apply()或lambda函数?

提前感谢您的帮助或建议。

1 个答案:

答案 0 :(得分:0)

您的代码可能有不同的改进。

首先(这是您的问题),您仅使用临时的csv文件浏览数据帧。正如{coldspeed所解释的那样,apply不好,但是使用磁盘更糟。

由于您已经具有要逐行应用于现有数据框以添加新列的Python函数,因此这是apply的用例。直接访问底层的numpy数组当然更快,但是熊猫已经被创建为具有便捷框架,而便利是以付出代价的。因此,您可以在此处向数据框添加新列:

df = pd.read_csv(input_csv_file_path)
df['DB_Entity'] = df['DB_Entity'].str.replace(' ', '')
df['DB_Attributes'] = df['DB_Attributes'].str.replace(' ', '')
df['DB_Attr_Exist'] = df.apply(lambda x: check_column_existence(
                          dbHost, dbPort, dbName, dbUser, dbPassword,
                          'dbo'+x['DB_Entity'], x['DB_Attributes'])

接下来,在check_column_existence函数中,为每行创建一个新的数据库连接。这是一个相当昂贵的操作,您实际上应该在处理文件之前将其打开一次,并仅在最后将其关闭。