arg_parse无或列出熊猫read_table

时间:2019-07-17 15:40:36

标签: python pandas argparse

我正在使用熊猫处理以空格分隔的数字数据文件。有些文件带有标题行,有些则没有。 Pandas通过允许 int,int列表,默认'infer'的标头值来处理此问题,而 None 没有标头。我希望在命令行中解析此信息,如:

python myscript file.txt -Header None

这是我尝试过的:

parser.add_argument("-Header",
    help="specify whether the data have headers",
    args+, type=str, default=['None'])
args = parser.parse_args()

然后,我要检查是否传递了 int,int列表 None

if args.Header[0] != 'None':
    Header = [int(item) for item in args.Header[0].split(',')]
else:
    Header = None

然后我读取了数据

df = pd.read_table(data_file, comment = "#", header=Header) # read data

但是,我似乎无法正确传递“无”或“推断”。传递标头0确实可以,但是当然第一行被视为标头而不是数据。


编辑: 看来我的问题不在于arg_parse,而是当/不存在标头时,熊猫如何索引数据。我的标题类型错误:
result = self.index.get_value(self, key)
我会尽力解决这个问题。

1 个答案:

答案 0 :(得分:0)

给出documentation

  

如果未传递名称,则其行为与header = 0相同,并且从文件的第一行推断出列名称,如果显式传递了列名称,则其行为与header = None相同。

我会说pd.read_table并不是按照您打算的方式使用的。因此,我建议使用if语句将调用分为两个版本。

if header is None:
    df = pd.read_table(data_file, comment = "#")
else:
    df = pd.read_table(data_file, comment = "#", header=Header)