我正在尝试编写一个小的 python 脚本来读取.parquet
具有以下架构的文件:
一个 | b | C | d |
---|---|---|---|
0 | X | 2 | 是的 |
2 | 1 | X | z |
该脚本采用以下参数:
- 一个输入文件
- 多列
- 多个搜索字符串(可以是字符串、数字或正则表达式)
然后它在给定的列中搜索给定的搜索字符串,并返回包含给定列中给定值的 DataFrame 的整行。
我现在的问题是如何正确编写搜索,因为在当前实现中,如果我尝试搜索具有不同于 utf8 的 dtype 的列,则会出现以下错误:RuntimeError: Any(SchemaMisMatch("Series dtype UInt64 != utf8"))
程序执行如下所示:pyton ./pqtmgr.py -f './test.parquet' -c 'a' -s '2'
#!/usr/bin/python
# Imports
import polars
import argparse
### MAIN ###
# Main
def main():
arguments = parse_arguments()
dataframe = polars.read_parquet(arguments.files_input)
dataframe = dataframe_search(arguments, dataframe)
### MISC ###
# Search DataFrame and return a result DataFrame
def dataframe_search(arguments, dataframe) -> polars.DataFrame:
dataframes = []
for column in arguments.columns:
for search in arguments.search:
dataframes.append(
dataframe.filter(
(polars.col(column).str.contains(search))
)
)
return polars.concat(dataframes, True, "diagonal")
### ARGUMENTS ###
# Parse given arguments
def parse_arguments():
parser = argparse.ArgumentParser(
prog='pqtmgr.py'
)
# Add argument to take an input file
parser.add_argument(
'-f',
'--file-input',
dest='fils_input',
help='''
Takes one filepath as input file which will be searched
''',
required=True
)
# Add argument to take a list of columns to search
parser.add_argument(
'-c',
'--columns',
dest='columns',
help='''
Accepts one or multiple columns that will be searched
''',
nargs='*',
required=True
)
# Add argument to search the given strings
parser.add_argument(
'-s',
'--search',
dest='search',
help='''
Accepts one or more strings or regular expression that are searched for in the given columns
''',
nargs='*'
)
# Execute Main
if __name__ == '__main__':
main()