df_cs_op.description与df_cs_op[description]
时间: 2024-01-20 13:04:06 浏览: 60
`df_cs_op.description` 和 `df_cs_op[description]` 都是访问 pandas 数据框(DataFrame)中名为 `description` 的列的方式。
`df_cs_op.description` 是使用属性(attribute)访问该列,需要该列名符合 python 变量名的规则,即不能包含空格、运算符等特殊字符。这种方式只适用于列名符合规则的情况。
而 `df_cs_op[description]` 是使用字典(dictionary)式访问该列,可以处理列名中包含特殊字符的情况。这种方式可以访问数据框中的任何一列,无论列名是否符合 python 变量名的规则。
相关问题
new_df = new_df.select(*self.fill_empty_colums(new_df_cols, total)).withColumn("row_priority",F.lit(0)) older_df = older_df.select(*self.fill_empty_colums(old_df_cols, total)).withColumn("row_priority",F.lit(1)) key_column = [F.col(column_name) for column_name in key_columns]
这段代码的SQL实现如下:
```
-- 对 new_df 进行处理
WITH new_df_filled AS (
SELECT
*,
CASE WHEN col1 IS NULL THEN 'default_value' ELSE col1 END AS col1_filled,
CASE WHEN col2 IS NULL THEN 'default_value' ELSE col2 END AS col2_filled,
...,
CASE WHEN coln IS NULL THEN 'default_value' ELSE coln END AS coln_filled
FROM new_df
),
new_df_processed AS (
SELECT
col1_filled,
col2_filled,
...,
coln_filled,
0 AS row_priority
FROM new_df_filled
),
-- 对 older_df 进行处理
older_df_filled AS (
SELECT
*,
CASE WHEN col1 IS NULL THEN 'default_value' ELSE col1 END AS col1_filled,
CASE WHEN col2 IS NULL THEN 'default_value' ELSE col2 END AS col2_filled,
...,
CASE WHEN coln IS NULL THEN 'default_value' ELSE coln END AS coln_filled
FROM older_df
),
older_df_processed AS (
SELECT
col1_filled,
col2_filled,
...,
coln_filled,
1 AS row_priority
FROM older_df_filled
)
-- 合并两个DataFrame
SELECT
col1_filled,
col2_filled,
...,
coln_filled,
row_priority
FROM (
SELECT * FROM new_df_processed UNION ALL SELECT * FROM older_df_processed
) AS merged_df
WHERE (col1_filled, col2_filled, ..., coln_filled) IN (
SELECT col1_filled, col2_filled, ..., coln_filled
FROM new_df_processed
UNION
SELECT col1_filled, col2_filled, ..., coln_filled
FROM older_df_processed
WHERE NOT (col1_filled, col2_filled, ..., coln_filled) IN (
SELECT col1_filled, col2_filled, ..., coln_filled
FROM new_df_processed
)
)
```
其中,`new_df`和`older_df`分别是原始的DataFrame,`new_df_cols`和`old_df_cols`是DataFrame中的列名列表,`total`是总列数,`key_columns`是用于合并两个DataFrame的关键列。首先,对`new_df`和`older_df`分别进行处理,填充空列并添加`row_priority`列。然后,将两个DataFrame合并,并使用`WHERE`子句过滤出唯一的行。最后,选择填充后的列和`row_priority`列。需要注意的是,这段代码中的`NOT IN`子句可能会对性能产生负面影响,可以考虑使用`LEFT JOIN`和`NULL`判断来代替。
if result: row[df_list[i].columns.tolist()] = row_dat df_list[i].drop(df_list[i].index[0: count], inplace=True)
这段代码的作用是:如果变量result为True,就将row_dat添加到df_list[i]的末尾,并删除df_list[i]的前count行。其中,row_dat是一个包含DataFrame的一行数据的列表,df_list是一个包含多个DataFrame的列表,i是一个整数变量,count是一个整数常量。
阅读全文