pd.dataframe возвращает NaN [дубликат]

NSDate (или Date in Swift 3) не имеет часового пояса. Он записывает мгновение во времени по всему миру.

Внутренне, объекты даты записывают количество секунд со времени «даты эпохи» или «Полночь» 1 января 2001 года в по времени по Гринвичу , aka UTC.

Обычно мы думаем о датах в нашем локальном часовом поясе.

Если вы регистрируете дату, используя

print(NSDate()) 

Отображается система текущую дату, но она выражает это в UTC / Greenwich Mean Time. Таким образом, единственное место, где время будет выглядеть правильно, - это тот часовой пояс.

Вы получаете ту же проблему в отладчике, если вы выдаете команду отладчика

e NSDate()

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

EDIT # 2:

Улучшение моего предыдущего использования локализованной строки что делает его немного проще в использовании - создать расширение для класса Date:

extension Date {
    func localString(dateStyle: DateFormatter.Style = .medium, timeStyle: DateFormatter.Style = .medium) -> String {
        return DateFormatter.localizedString(from: self, dateStyle: dateStyle, timeStyle: timeStyle)
    }
}

Таким образом, вы можете просто использовать выражение типа Date().localString() или хотите только распечатать время, вы можете использовать Date().localString(dateStyle:.none)

EDIT:

Я только что обнаружил, что NSDateFormatter (DateFormatter в Swift 3) имеет метод класса localizedString. Это делает то, что делает мое расширение ниже, но более просто и чисто. Вот объявление:

class func localizedString(from date: Date, dateStyle dstyle: DateFormatter.Style, timeStyle tstyle: DateFormatter.Style) -> String

Итак, вы просто используете

let now = Date()
print (DateFormatter.localizedString(
  from: now, 
  dateStyle: .short, 
  timeStyle: .short))

. Вы можете в значительной степени игнорировать все ниже.


I создали категорию класса NSDate (Date in swift 3), которая имеет метод localDateString, который отображает дату в локальном часовом поясе пользователя.

Вот категория в форме Swift 3: (filename Date_displayString. swift)

extension Date {
  @nonobjc static var localFormatter: DateFormatter = {
    let dateStringFormatter = DateFormatter()
    dateStringFormatter.dateStyle = .medium
    dateStringFormatter.timeStyle = .medium
    return dateStringFormatter
  }()

  func localDateString() -> String
  {
    return Date.localFormatter.string(from: self)
  }
}

И в форме Swift 2:

extension NSDate {
   @nonobjc static var localFormatter: NSDateFormatter = {
    let dateStringFormatter = NSDateFormatter()
    dateStringFormatter.dateStyle = .MediumStyle
    dateStringFormatter.timeStyle = .MediumStyle
    return dateStringFormatter
  }()

public func localDateString() -> String
  {
    return NSDate.localFormatter.stringFromDate(self)
  }
}

(Если вы предпочитаете другой формат даты, довольно легко изменить формат, используемый форматом даты.

Я бы предложил разместить соответствующую версию этого файла Swift 2 / Swift 3 во всех ваших проектах.

Затем вы можете использовать

Swift 2:

print(NSDate().localDateString())

Swift 3:

print(Date().localDateString())

36
задан Burhan Khalid 23 July 2016 в 13:59
поделиться

2 ответа

Да, с помощью set_index вы можете сделать Locality ваш индекс строки.

data.set_index('Locality', inplace=True)

Если inplace=True не указана, set_index возвращает измененный файл данных как результат.

Пример:

> import pandas as pd
> df = pd.DataFrame([['ABBOTSFORD', 427000, 448000],
                     ['ABERFELDIE', 534000, 600000]],
                    columns=['Locality', 2005, 2006])

> df
     Locality    2005    2006
0  ABBOTSFORD  427000  448000
1  ABERFELDIE  534000  600000

> df.set_index('Locality', inplace=True)
> df
              2005    2006
Locality                  
ABBOTSFORD  427000  448000
ABERFELDIE  534000  600000

> df.loc['ABBOTSFORD']
2005    427000
2006    448000
Name: ABBOTSFORD, dtype: int64

> df.loc['ABBOTSFORD'][2005]
427000

> df.loc['ABBOTSFORD'].values
array([427000, 448000])

> df.loc['ABBOTSFORD'].tolist()
[427000, 448000]
80
ответ дан Michael Hoff 18 August 2018 в 01:35
поделиться
  • 1
    upvoted! невозможно сделать в 1 шаг, я думаю – PirateApp 27 June 2018 в 11:41

Вы можете изменить индекс, как описано уже с помощью set_index. Вам не нужно вручную менять строки с помощью столбцов, в pandas есть метод transpose (data.T), который делает это для вас:

> df = pd.DataFrame([['ABBOTSFORD', 427000, 448000],
                    ['ABERFELDIE', 534000, 600000]],
                    columns=['Locality', 2005, 2006])

> newdf = df.set_index('Locality').T
> newdf

Locality    ABBOTSFORD  ABERFELDIE
2005        427000      534000
2006        448000      600000

, после чего вы можете получить значения столбца dataframe и преобразовать их в список:

> newdf['ABBOTSFORD'].values.tolist()

[427000, 448000]
6
ответ дан famargar 18 August 2018 в 01:35
поделиться
  • 1
    Путь более простой, чем я думал, что это будет! Благодаря! – Malachi Bazar 7 June 2018 в 03:09
Другие вопросы по тегам:

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