Как переносить данные столбца для заполнения пробелов в Pandas Python? [Дубликат]

Если вы уже используете jQuery UI в своем проекте, вы можете сделать это следующим образом:

var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));

// formatted will be 'Jul 8, 2014'

Доступны некоторые параметры формата даты датпикера для игры здесь .

5
задан Lelouch 18 August 2015 в 01:26
поделиться

3 ответа

Вот что я сделал:

Я расколол ваш файл данных в более длинный формат, а затем сгруппировал его по столбцу имен. В каждой группе я бросаю NaNs, но затем пересказываю полный набор h1 мысли h4, тем самым воссоздавая ваши NaN справа.

from io import StringIO
import pandas

def defragment(x):
    values = x.dropna().values
    return pandas.Series(values, index=df.columns[:len(values)])

datastring = StringIO("""\
Name    h1    h2    h3    h4
A       1     nan   2     3
B       nan   nan   1     3
C       1     3     2     nan""")

df = pandas.read_table(datastring, sep='\s+').set_index('Name')
long_index = pandas.MultiIndex.from_product([df.index, df.columns])

print(
    df.stack()
      .groupby(level='Name')
      .apply(defragment)
      .reindex(long_index)  
      .unstack()  
)

И вот я получаю:

   h1  h2  h3  h4
A   1   2   3 NaN
B   1   3 NaN NaN
C   1   3   2 NaN
2
ответ дан Paul H 26 August 2018 в 13:20
поделиться

Вот как вы могли бы сделать это с помощью регулярного выражения (возможно, не рекомендуется):

pd.read_csv(StringIO(re.sub(',+',',',df.to_csv())))
Out[20]: 
  Name  h1  h2  h3  h4
0    A   1   2   3 NaN
1    B   1   3 NaN NaN
2    C   1   3   2 NaN
2
ответ дан maxymoo 26 August 2018 в 13:20
поделиться

Сначала сделайте функцию.

        def squeeze_nan(x):
            original_columns = x.index.tolist()

            squeezed = x.dropna()
            squeezed.index = [original_columns[n] for n in range(squeezed.count())]

            return squeezed.reindex(original_columns, fill_value=np.nan)

Во-вторых, примените функцию.

df.apply(squeeze_nan, axis=1)

Вы также можете попробовать оси = 0 и. [:: - 1]

[EDIT]

@ Mxracer888 вы хотите это?

def squeeze_nan(x, hold):
    if x.name not in hold:
        original_columns = x.index.tolist()

        squeezed = x.dropna()
        squeezed.index = [original_columns[n] for n in range(squeezed.count())]

        return squeezed.reindex(original_columns, fill_value=np.nan)
    else:
        return x

df.apply(lambda x: squeeze_nan(x, ['B']), axis=1)

3
ответ дан su79eu7k 26 August 2018 в 13:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: