Как мне представить свой вывод в виде фрейма данных Pandas? - PullRequest
0 голосов
/ 26 сентября 2019

CHECK_OUTPUT_HERE В настоящее время я получаю вывод в виде строки.Я не уверен, как преобразовать эту строку в кадр данных панды.Я получаю 3 разных таблицы в моем выводе.Это в строковом формате.Одно из следующих 2 решений будет работать для меня:

Преобразовать вывод этой строки в 3 различных кадра данных.ИЛИ Измените что-нибудь в функции, чтобы я получил выходные данные в виде 3 разных фреймов данных

Я пытался использовать RegEx для преобразования строкового вывода в фрейм данных, но в моем случае это не сработает, поскольку я хочу, чтобы мой вывод был динамическим.Это должно работать, если я сделаю еще один вклад.

def column_ch(self, sample_count=10):
    report = render("header.txt")
    match_stats = []
    match_sample = []
    any_mismatch = False
    for column in self.column_stats:
        if not column["all_match"]:
            any_mismatch = True
            match_stats.append(
                {
                    "Column": column["column"],
                    "{} dtype".format(self.df1_name): column["dtype1"],
                    "{} dtype".format(self.df2_name): column["dtype2"],
                    "# Unequal": column["unequal_cnt"],
                    "Max Diff": column["max_diff"],
                    "# Null Diff": column["null_diff"],
                }
            )
            if column["unequal_cnt"] > 0:
                match_sample.append(
                    self.sample_mismatch(column["column"], sample_count, for_display=True)
                )

    if any_mismatch:
        for sample in match_sample:
            report += sample.to_string()
            report += "\n\n"
            print("type is", type(report))
    return report

1 Ответ

0 голосов
/ 27 сентября 2019

Поскольку у вас есть строка, вы можете передать ее в файлоподобный буфер и затем прочитать ее с помощью pandas read_csv в кадре данных.

Предполагая, что ваша строка с кадром данныхназывается dfstring, код будет выглядеть следующим образом:

import io
bufdf = io.StringIO(dfstring)
df = pd.read_csv(bufdf, sep=???)

Если ваша строка содержит несколько фреймов данных, разделите ее на split и используйте цикл.

import io
dflist = []
for sdf in dfstring.split('\n\n'): ##this seems the separator between two dataframes
    bufdf = io.StringIO(sdf)
    dflist.append(pd.read_csv(bufdf, sep=???))

Beосторожно передавая соответствующий параметр sep, мой ??? означает, что я не могу понять, что может быть правильным параметром.Ваше поле разделено пробелами, поэтому вы можете использовать sep='\s+'), но я вижу, что у вас также есть пробелы, которые не должны быть разделителями, так что это может вызвать ошибку синтаксического анализа.sep принять регулярное выражение, поэтому чтобы иметь 2 последовательных пробела в качестве разделителя, вы можете сделать: sep='\s\s+' (для этого потребуется дополнительный параметр engine='python').Но опять же, убедитесь, что у вас есть как минимум 2 пробела между двумя последовательными полями.

См. здесь для справки о модуле io и StringIO.
Обратите внимание, чтоМодуль io существует в python3, но не в python2 (у него другое имя), но поскольку последние версии панд требуют python3, я думаю, вы используете python3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...