반응형

출처 : https://stackoverflow.com/questions/23786674/python-mysqldb-how-to-get-columns-name-without-executing-select-in-a-big-tab

python: MySQLdb. 의 큰 테이블에서 select * 없이 컬럼명을 얻는 방법

저는 테이블에서 컬럼명을 얻고 싶습니다만 100만 개 이상의 데이터가 그 안에 있습니다. 그래서 다음 쿼리를 사용할 수 없습니다.

cursor.execute("SELECT * FROM table_name")
print cursor.description

sqlite3에서 저는 이 방법을 사용하였습니다.

crs.execute("PRAGMA table_info(%s)" %(tablename[0]))
for info in crs:
    print info

이는 python mysqldb에서는 작동하지 않습니다. 방법을 아는 분 계신가요?


5개 답변중 1개의 답변만 추려냄.

당신은 SHOW columns을 사용할 수 있습니다.

cursor.execute("SHOW columns FROM table_name")
print [column[0] for column in cursor.fetchall()]

참고 바람니다. 이는 본질적으로 desc를 사용하는 것과 같습니다.

cursor.execute("desc table_name")
print [column[0] for column in cursor.fetchall()]
반응형
반응형

출처


ctypes로 Python에서 C++ 클래스 호출하기

저는 파이썬에서 C++ 클래스를 호출하고 싶어서 최근에 스스로 방법을 찾았습니다. 저는 (Thrift를 사용하여 전에 했던 것처럼 - Python과 C++을 위한 Apache Thrift 사용하기를 보세요.) 분리된 프로세스를 호출하고 싶지 않았고 C++ 라이브러리를 직접 호출하고 싶었습니다.

저는 진행하기 전에 이를 파이썬으로 하기 위한 다양한 방법이 있다는 것을 말하고 싶습니다. 그리고 저는 작동한 것 중 하나를 선택하였습니다. 다른 기술도 사용 가능하며 어떤 기술이 '최상'인지에 대한 의견은 상당히 분분해 보입니다.

C++ 클래스로 시작하기 위해 평범하게 작성하였습니다.

#include <iostream>

// A simple class with a constuctor and some methods...

class Foo
{
    public:
        Foo(int);
        void bar();
        int foobar(int);
    private:
        int val;
};

Foo::Foo(int n)
{
    val = n;
}

void Foo::bar()
{
    std::cout << "Value is " << val << std::endl;
}

int Foo::foobar(int n)
{
    return val + n;
}

다음 ctypes 시스템은 C++을 사용할 수 없기 때문에 C++ 코드 주변에 C wrapper를 놓을 것입니다. 이를 하기 위해 파일 제일 밑에 다음 부분에 코드를 추가합니다.

// ctypes는 C와만 대화할 수 있기 때문에 C++ 클래스를 위한 C 함수를 정의합니다.

extern "C"
{
    Foo* Foo_new(int n) {return new Foo(n);}
    void Foo_bar(Foo* foo) {foo->bar();}
    int Foo_foobar(Foo* foo, int n) {return foo->foobar(n);}
}

호출하기 원하는 각 메소드를 클래스 기반이 아닌 이름으로 제공해야 함을 알아두세요.

우리는 우리 코드에서 lib.so 파일을 빌드해야 합니다.

다음을 쉘에서 입력하세요.

$ g++ -c -fPIC foo.cpp -o foo.o
$ g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o 

또는 CMake를 사용할 수 있습니다.

다음은 foo.cpp를 빌드하기 위한 CMakeLists.txt 입니다.

cmake_minimum_required(VERSION 2.8.9)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}")
set(CMAKE_MACOSX_RPATH 1)

project (foo)
set (SOURCE foo.cpp)
add_library(foo MODULE ${SOURCE}) 

저는 Mac에서 빌드를 해서 MacOS를 위해 4번째 줄을 추가하였습니다. 리눅스에서도 잘 작동하겠지만 필요는 없습니다.

이제 C++로 컴파일 된 내용을 작성합니다. 우리는 클래스에 대한 Python wrapper를 빌드하려 합니다.

import ctypes

lib = ctypes.cdll.LoadLibrary('./libfoo.so')

class Foo(object):
    def __init__(self, val):
        lib.Foo_new.argtypes = [ctypes.c_int]
        lib.Foo_new.restype = ctypes.c_void_p

        lib.Foo_bar.argtypes = [ctypes.c_void_p]
        lib.Foo_bar.restype = ctypes.c_void_p

        lib.Foo_foobar.argtypes = [ctypes.c_void_p, ctypes.c_int]
        lib.Foo_foobar.restype = ctypes.c_int

        self.obj = lib.Foo_new(val)

    def bar(self):
        lib.Foo_bar(self.obj)

    def foobar(self, val):
        return lib.Foo_foobar(self.obj, val)

리턴 값의 타입과 argument 타입을 정의하는 요구사항을 적으세요. (하나도 리턴하지 않으면 예시로 void를 리턴합니다.) 이것이 없으면 segmentation fault(등)를 얻을 것입니다.
이제 모든 것을 다 하였고 모듈을 빌드해야 합니다. 파이썬에서 간단히 그것을 import할 수 있습니다.
예를 들어

from foo import Foo

# 우리는 5라는 값으로 Foo 객체를 생성할 것입니다...
f=Foo(5)

# f.bar()를 호출하는 것은 값을 포함한 메시지를 출력할 것입니다...
f.bar()

# 이제 f, Foo 객체에서 저장되어 있는 값에 값(7)을 더하기 위해 foobar를 사용합니다.
print (f.foobar(7))

# 또 한 번 같은 메소드를 호출합니다 - 이 번엔 일반적인 파이썬 정수를 
# 보여줄 것입니다...

x = f.foobar(2)
print (type(x))

이 간단한 데모를 위한 전체 소스 코드는 여기에 있습니다.

https://github.com/Auctoris/ctypes_demo

이 간단한 데모를 위한 전체 소스 코드는 여기에 있습니다.

https://github.com/Auctoris/ctypes_demo

반응형
반응형

출처 : https://stackoverflow.com/questions/11892729/how-to-log-in-to-a-website-using-pythons-requests-module/

Python의 Requests 모듈을 사용하여 웹사이트에 "로그인"하는 방법

저는 Python으로 Requests 모듈을 사용하여 웹사이트로 로그인하는 요청을 post 방식으로 처리하려 합니다만 잘 작동하지 않습니다. 저는 이걸 처음 해 봅니다... 그래서 제 사용자명과 비밀번호 쿠키나 HTTP 인증 같은 형태를 만들어야 하는지 알 수 없습니다.

from pyquery import PyQuery
import requests

url = 'http://www.locationary.com/home/index2.jsp'

지금부터 저는 "post" 방식과 쿠키를 사용합니다.

ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}

r = requests.post(url, cookies=ck)

content = r.text

q = PyQuery(content)

title = q("title").text()

print title

저는 쿠키에서 뭔가 잘못하고 있는 거 같지만... 모르겠습니다.

제가 정확히 로그인하지 못 했다면, 홈페이지 제목은 "Locationary.com"이 나올 것이고 로그인을 했다면 "Home Page"가 되어야 합니다.

만약 requests와 쿠키에 관한 몇가지를 저에게 설명해 주시고 이에 관해 저를 도와주신다면 정말 감사하겠습니다.

감사합니다.

... 아직 잘 작동하지는 않지만 로그인 전에 홈페이지의 HTML은 다음처럼 나옵니다.

저는 잘하고 있다고 생각하지만, 출력은 아직 "Locationary.com"입니다.

2번째 편집:

저는 그 도메인의 페이지를 요청할 때마다 오래동안 로그인을 유지할 수 있기를 원합니다. 제가 로그인을 했다면 나타날 그 내용이 나타나기를 원합니다.


6개의 답변 중 1 개의 답변만 추려냄.

저는 당신이 다른 해결책을 찾았다는 것을 알고 있지만 저처럼 이 질문의 해결책 혹은 같은 질문을 찾기 원하는 사람들을 위해 다음처럼 requests를 사용하여 할 수 있습니다.

첫째, 마커스(Marcus)가 한 것처럼 로그인 form(양식)에 post할 URL, 사용자이름과 비밀번호 필드의 name 속성을 소스에서 확인합니다. 그의 예시에서는 inUserName과 inUserPass 입니다.

일단, payload로 로그인 세부 정보를 post 방식으로 요청하기 위해 request.Session() 인스턴스를 사용할 수 있습니다. Session 인스턴스로부터 요청하는 것은 본질적으로 일반적인 requests를 사용하는 것과 같습니다. 이는 간단하게 쿠키들을 사용하고 저장하도록 하는 지속성이 추가된 것입니다.

당신의 로그인 시도가 성공적이었다 가정하면 그 사이트에서 이후 요청을 하기 위해 session 인스턴스를 간단하게 사용할 수 있습니다. 당신을 식별하기 위한 쿠키가 요청을 승인하는 데 사용됩니다.

예시

import requests

# 로그인 form에 post 방식으로 전송될 세부 내용을 작성합니다.
payload = {
    'inUserName': 'username',
    'inUserPass': 'password'
}

# 'with'는 사용한 뒤에 session이 닫히도록 보장합니다.
with requests.Session() as s:
    p = s.post('LOGIN_URL', data=payload)
    # 성공적으로 로그인 했는지 보기 위해 더 현명하게 어떤게 리턴되었는지 html을 출력합니다.
    print p.text

    # 승인된 요청
    r = s.get('A protected web page url')
    print r.text
        # 기타...
반응형
반응형

출처 : https://stackoverflow.com/questions/4260280/if-else-in-pythons-list-comprehension

파이썬 list comprehension에서 if/else 구문 사용법?

파이썬에서 어떻게 다음 구문을 할 수 있습니까?

row = [unicode(x.strip()) for x in row if x is not None else '']

특별히:

  1. 빈 문자열을 None으로 대체하고

  2. 함수를 실행하고 싶습니다.


3 개의 답변 중 1 개의 답변만 추려냄.

이렇게 하실 수 있고 순서의 문제입니다.

[ unicode(x.strip()) if x is not None else '' for x in row ]

일반적으로,

[f(x) if condition else g(x) for x in sequence]

if 조건만으로 for list comprehensions을 사용한다면

[f(x) for x in sequence if condition]

이는 실제로 다른 언어 구문인 조건부 표현식을 사용하는 데, 그 자체는 list comprehension 문법의 일부가 아니며 if 뒤에 for…in 이 list comprehension이며 원래 데이터(source)를 순회(iterable)하면서 각 요소를 필터링하는데 (조건부 표현식이) 사용됩니다.

조건식은 2가지 값 중 선택하려는 모든 종류의 상황에서 사용할 수 있습니다. 이 조건식은 다른 언어에도 존재하는 ?: 삼항 연산자 와 같습니다. 예를 들면

value = 123
print(value, 'is', 'even' if value % 2 == 0 else 'odd')

이렇게 사용하실 수 있습니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/4770297/python-convert-utc-datetime-string-to-local-datetime

파이썬 - UTC 날짜시간 문자열을 local 날짜시간으로 변환하기

저는 시간과 utc간에 변환 할 필요가 없었습니다. 최근에 제 앱이 시간대를 인식하도록 요청이 있었으며 스스로 알아보고 있었습니다. 현지 시간을 utc로 변환하는 방법에 대한 많은 정보를 얻었는데 초보자 (어쩌면 그렇게 잘못하고있는 것 같습니다)라 최종 사용자 시간대로 UTC 시간을 쉽게 변환하는 방법에 대한 정보는 찾을 수 없습니다.

간단히 말해서 android app은 나를 (appengine app) 데이터로 보내고 그 데이터는 타임 스탬프입니다. 해당 타임 스탬프를 utc 시간으로 저장하기 위해 다음을 사용하였습니다.

datetime.utcfromtimestamp(timestamp)

이는 효과가 있는 것 같습니다. 내 앱이 데이터를 저장하면 5시간 이전 시간으로 저장됩니다. (저는 EST-5 시간대에 있습니다.)

데이터가 appengine의 BigTable에 저장되고 검색되면 다음과 같은 문자열로 나타납니다.

"2011-01-21 02:37:21"

이 문자열을 사용자의 올바른 시간대에있는 DateTime으로 변환하려면 어떻게 해야 합니까?

또한, 사용자 시간대 정보가 주로 저장됩니까? tz(시간대) 정보를 일반적으로 어떻게 저장합니까? (예시: "-5:00" 또는 "EST" 등등?) 첫 번째 질문에 대한 대답에는 두 번째 대답에 포함될 수 있습니다.


7 개의 답변 중 1 개의 답변만 추려냄.

당신이 tzinfo 객체를 제공하기 원하지 않으면 python-dateutil 라이브러리를 확인하시면 됩니다. 시간대에 대한 표준명으로 시간대 규칙을 참조할 수 있도록 zoneinfo (Olson) 데이터베이스 위에 tzinfo 구현을 제공합니다.

from datetime import datetime
from dateutil import tz

# 방법 1: 시간대 하드코딩:
from_zone = tz.gettz('UTC')
to_zone = tz.gettz('America/New_York')

# 방법 2: 시간대 자동감지:
from_zone = tz.tzutc()
to_zone = tz.tzlocal()

# utc = datetime.utcnow()
utc = datetime.strptime('2011-01-21 02:37:21', '%Y-%m-%d %H:%M:%S')

# 날짜시간 객체가 기본으로 '순수'하기 때문에  
# UTC 시간대에 있다고 날짜시간 객체에게 알려줍니다.
utc = utc.replace(tzinfo=from_zone)

# 시간대를 변환합니다.
central = utc.astimezone(to_zone)

편집 strptime 사용법을 보여주기 위해 예제를 확장함

편집2 더 좋은 entry point 메소드를 보여주기 위해 API 사용법을 수정

편집3 시간대 (Yarin)를 자동 감지하기 위한 메소드 포함

반응형
반응형

출처 : http://stackoverflow.com/questions/2184181/decoding-tcp-packets-using-python

파이썬을 사용하여 TCP 패킷 decode하기

저는 TCP 접속을 통해 데이터를 decode하려고 합니다. 그 패킷은 작고 100바이트를 넘지 않습니다. 하지만 제가 받은 그 패킷들이 많을 때 그 패킷 중 일부는 결합 됩니다. 이를 방지할 수 있는 방법이 있습니까? 저는 파이썬을 사용합니다.

저는 그 패킷들을 분리하고 싶소 제 소스는 밑에 있습니다. 패킷은 STX 바이트로 시작하며 ETX 바이트로 끝납니다. STX 뒤의 바이트는 패킷 길이이며, (패킷 길이가 5 미만이면 유효하지 않습니다.) checksum은 ETX 이전 바이트입니다.

def decode(data):
  while True:
    start = data.find(STX)
    if start == -1: #메세지에 STX가 없다면
        pkt = ''
        data = ''
        break
    #stx 발견 , 다음 바이트는 길이
    pktlen = ord(data[1])
    #ETX로 메세지가 끝나는 지 체크 또는 checksum이 유효하지 않을 때
    if pktlen < 5 or data[pktlen-1] != ETX or checksum_valid(data[start:pktlen]) == False:
        print "Invalid Pkt"
        data = data[start+1:]
        continue
    else:
        pkt = data[start:pktlen]
        data = data[pktlen:]
        break

return data , pkt

저는 이것을 다음처럼 사용했습니다.

#process reports
try:
    data = sock.recv(256) 
except: continue 
else:
    while data:
        data, pkt = decode(data) 
        if pkt:
           process(pkt)

데이터 스트림에서 여러 개의 패킷이 있다면 리스트의 모음으로 패킷을 리턴하거나 첫 번째 패킷만 리턴하는 것이 최선입니다.

저는 C는 익숙하지만 파이썬에 익숙하지 않습니다. 이 방법이 괜찮나요? 어떠한 충고도 감사합니다.

5 개의 답변 중 1 개의 답변만 추려냄.

저는 이것처럼 스트림에서부터 패킷을 decoding에 대응하는 클래스를 만들었습니다.

class PacketDecoder(object):

    STX = ...
    ETX = ...

    def __init__(self):
        self._stream = ''

    def feed(self, buffer):
        self._stream += buffer

    def decode(self):
        '''
        Yields packets from the current stream.
        '''
        while len(self._stream) > 2:
            end = self._stream.find(self.ETX)
            if end == -1:
                break

            packet_len = ord(self._stream[1])
            packet = self._stream[:end]
            if packet_len >= 5 and check_sum_valid(packet):
                yield packet
            self._stream = self._stream[end+1:]

그리고나서 이를 다음처럼 사용합니다.

decoder = PacketDecoder()
while True:
    data = sock.recv(256) 
    if not data:
        # handle lost connection... 접속이 끊어졌을 때 다룰 코드
    decoder.feed(data)
    for packet in decoder.decode():
        process(packet)
반응형
반응형

출처 : http://stackoverflow.com/questions/2682745/how-to-create-a-constant-in-python

Python에서 상수를 만드는 방법

파이썬에서 상수를 선언할 수 있는 방법이 있습니까? 자바에서는 다음 방법으로 상수를 만들 수 있습니다.

public static final String CONST_NAME = "Name";

파이썬에서 위의 자바 상수 선언과 같은 방법은 무엇입니까?


41 개의 답변 중 2 개의 답변만 추려냄.

아니오. 방법이 없습니다. 파이썬에서 상수를 선언할 수 없습니다. 그저 그 변수를 바꾸지 마세요.만약 클래스에 있으면, 같은 방법은

class Foo(object): 
    CONST_NAME = "Name"

클래스에 없다면,

CONST_NAME = "Name"

처럼 사용할 수 있습니다.

하지만, Alex Martelli에 Constants in Python 의 코드 조각을 보시길 원하실 거라 생각합니다.

Python 3.8부터, (mypy처럼) 정적 타입 체커가 변수가 재할당되지 말아야 한다고 알려주는 typing.Final 표기법이 있습니다. 이는 Java의 final과 거의 같습니다. 하지만, 재할당을 실제 막지는 못합니다.

from typing import Final

a: Final = 1

# 잘 실행됩니다, 하지만 mypy에서 이를 실행한다면 오류를 보고할 것입니다.
a = 2

다른 언어처럼 키워드가 없습니다. 하지만, 데이터를 읽는 "getter 함수"를 가지지만 데이터를 다시 쓰는 "setter 함수"가 없는 Property를 생성할 수 있습니다. 이는 본질적으로 식별자가 바뀌는 것을 방지합니다.

여기에 클래스 구현을 사용하여 다른 방법으로 구현하였습니다.

이 코드는 상수에 관해 독자가 쉽게 이해할 수 없습니다. 아래 설명이 있습니다.

def constant(f):
    def fset(self, value):
        raise TypeError
    def fget(self):
        return f()
    return property(fget, fset)

class _Const(object):
    @constant
    def FOO():
        return 0xBAADFACE
    @constant
    def BAR():
        return 0xDEADBEEF

CONST = _Const()

print CONST.FOO
##3131964110

CONST.FOO = 0
##Traceback (most recent call last):
##    ...
##    CONST.FOO = 0
##TypeError: None

코드 설명:

  1. 표현식을 취하는 constant 함수를 정의하고 "getter"를 생성하기 위해 그것을 사용합니다. 함수는 오직 표현식의 값만 리턴합니다.
  2. setter 함수는 읽기 전용이기 때문에 TypeError를 발생시킵니다.
  3. 읽기 전용 properties를 정의하기 위한 decoration으로써 우리가 방금 생성한 함수 constant를 사용합니다.

... 중략 ...

반응형
반응형

출처 : http://stackoverflow.com/questions/4960048/python-3-and-mysql

Python 3과 MySQL

저는 Windows에서 ActiveState Python 3를 사용하고 있고 MySQL 데이터베이스에 접속 하기를 원했습니다. 저는 mysqldb 가 사용할 수 있는 모듈이라 들었습니다. 저는 Python 3 용 mysqldb을 찾을 수 없었습니다.

mysqldb용 바이너리 파일이 있는 가능한 저장소가 있습니까? 윈도우즈에서 Python 3로 MySQL에 어떻게 접속할 수 있습니까?


14 개의 답변 중 1 개의 답변

mysql과 함께 Python 3를 사용할 수 있는 몇 가지 옵션이 있습니다.

https://pypi.python.org/pypi/mysql-connector-python

  • Oracle에 의해 공식적으로 지원됨
  • 순수 파이썬
  • 약간 느림
  • MySQLdb와 호환되지 않음

https://pypi.python.org/pypi/pymysql

  • 순수 파이썬
  • mysql-connector 보다 빠름
  • pymysql.install_as_MySQLdb()를 호출한 후, MySQLdb와 거의 대부분 호환됨.

https://pypi.python.org/pypi/cymysql

  • C 속도 향상을 위한 pymysql의 복제버전

https://pypi.python.org/pypi/mysqlclient

  • Django에서 추천하는 라이브러리
  • 원래 MySQLdb의 복제버전, 언젠가 다시 합쳐지길 희망함.
  • 가장 빠른 실행을 보이며 C 기반이기 때문
  • 가장 MySQLdb와 호환성이 좋고, 이 라이브러리가 복제버전이기 때문
  • python-mysqldb패키지와 python3-mysqldb 패키지 둘 다 제공하기 위해 Debian과 Ubuntu가 이를 사용

참고할 벤치마크: https://github.com/methane/mysql-driver-benchmarks

반응형
반응형

출처 : http://stackoverflow.com/questions/37061089/trouble-with-tensorflow-in-jupyter-notebook

Jupyter Notebook에서 TensorFlow 사용 문제

저는 Ubuntu 14.04에서 Anaconda를 통해 Jupyter Notebook을 설치했고 바로 TensorFlow를 설치 하였습니다. 저는 TensorFlow가 Notebook에서나 간단히 스트립트를 작성하는 것과 상관 없이 작동하게 하고 싶습니다. 이를 이루기 위한 저의 시도에서, 저는 TensorFlow를 두 번 설치를 했는데 첫 번째는 Anaconda를 사용하였고 그 다음은 pip를 사용하였습니다. Anaconda 설치가 잘 되었지만 "source activate tensorflow"를 python에서 먼저 실행할 필요가 있었습니다. 만약 python을 (터미널에서) 일반적인 방법으로 시작하면 pip 설치는 잘 작동하였고 tensorflow도 잘 불러 왔습니다.

저의 질문은 어떻게 Jupyter notebook에서 이를 잘 실행할 수 있을까요? 입니다.

이는 저를 더 일반적인 질문으로 이끌었습니다. 저의 Jupyter/Anaconda에서 python kernel은 시스템에서 널리 사용되는 python kernel(또는 환경? 여기서 용어는 확실하지 않습니다)과 분리되어 있는 거 같습니다. 이 커널들을 동시에 제어한다면 좋겠습니다. 이게 된다면 제가 새로운 python 라이브러리를 설치할 때 python을 실행하는 모든 다양한 방법으로 접근할 수 있기 때문입니다.


4 개의 답변 중 1 개의 답변만 추려냄.

업데이트

TensorFlow 웹 사이트는 5 개의 설치를 지원합니다.

제가 이해한 바로는 Pip 설치를 직접 사용하여 Jupyter Notebook에서 TensorFlow를 가져 오는 것이 좋습니다 (Jupyter Notebook이 설치되어 있고 다른 문제가 없는 한) b/z 가상 환경을 만들지 않았습니다.

virtualenv 설치 및 conda 설치를 사용하려면 새로 생성된 TensorFlow 환경에 jupyter를 설치하여 TensorFlow가 Jupyter Notebook에서 작동할 수 있도록 해야 합니다. (자세한 내용은 다음 원본 게시물 섹션 참조).

Docker 설치는 VirtualBox에 일부 포트 설정이 있어야 Jupyter Notebook에서 TensorFlow가 작동 할 수 있습니다 (이 게시물 참조).

소스에서 설치하는 경우 소스 코드가 빌드되고 설치된 환경에 따라 다릅니다. 새로 생성된 가상 환경 또는 Jupyter Notebook이 설치되지 않은 가상 환경에 설치된 경우 Jupyter Notebook에서 Tensorflow를 사용하려면 Jupyter Notebook도 가상 환경에 설치해야 합니다.

원래 글

Ipython 또는 Jupyter(Ipython) Notebook에서 TensorFlow를 사용하려면 tensorflow가 활성화된 환경에서 (tensorflow를 설치한 뒤에) Jupyter와 Ipython을 설치해야 합니다.

tensorflow 환경에서 Ipython과 Jupyter를 설치하기 전에 터미널에서 다음 명령어를 실행합니다.

username$ source activate tensorflow

(tensorflow)username$ which ipython
(tensorflow)username$ /Users/username/anaconda/bin/ipython

(tensorflow)username$ which jupyter
(tensorflow)username$ /Users/username/anaconda/bin/jupyter

(tensorflow)username$ which python
(tensorflow)username$ /User/username//anaconda/envs/tensorflow/bin/python

이는 당신이 터미널에서 python을 열었을 때, tensorflow가 설치된 "환경"에서 설치된 것들을 이렇게 사용중이라고 당신에게 말해줍니다. 그러므로 당신은 실제 import tensorflow가 성공적으로 가능합니다. 하지만, ipython 또는 jupyter notebook을 실행한다면, 이들은 tensorflow에 장착된 "환경"에서 설치되지 않았기 때문에 tensorflow 모듈이 없는 일반적인 환경을 사용하기 때문에 import 오류가 나오게 됩니다.

당신은 envs/tensorflow/bin 디렉터리에서 파일 목록을 봄으로서 이를 검증할 수 있습니다.

(tensorflow) username$ ls /User/username/anaconda/envs/tensorflow/bin/

당신은 "ipython"이나 "jupyter" 목록이 없음을 알 수 있습니다.

Ipython 또는 Jupyter Notebook에서 tensorflow를 사용하려면, 간단하게 tensorflow 환경에서 Notebook을 설치하면 됩니다.

(tensorflow) username$ conda install ipython
(tensorflow) username$ pip install jupyter #(use pip3 for python3)

이들을 설치한 후, "jupyter"와 "ipython"은 envs/tensorflow/bin 디렉터리에서 보일 것입니다.

알아두세요: jupyter notebook에서 tensorflow 모듈을 import하기 전에, notebook을 먼저 닫으세요. 그리고 "source deactivate tensorflow"를 먼저 하고 "같은 페이지"에서 이들의 실행을 보장하기 위해 다시 그것을 ("source activate tensorflow") 활성화 하세요. 그리고 notebook을 다시 열어 import tensorflow 해보세요. 성공적으로 import 될 것입니다. (적어도 저는 작동했습니다.)

반응형
반응형

출처 

http://chrisalbon.com/python/pandas_create_column_with_loop.html

For 루프로 Pandas 열 만들기


사전준비

import pandas as pd
import numpy as np

데이터프레임 예시 만들기

raw_data = {'student_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Jacon', 'Ryaner', 'Sone', 'Sloan', 'Piger', 'Riani', 'Ali'], 
        'test_score': [76, 88, 84, 67, 53, 96, 64, 91, 77, 73, 52, np.NaN]}
df = pd.DataFrame(raw_data, columns = ['student_name', 'test_score'])


학점을 할당하기 위한 함수 만들기

# 데이터를 저장할 list(리스트)를 만듭니다. grades = [] # 열에 추가할 각 행을 For로 순회합니다, for row in df['test_score']: # 이 값보다 크면, if row > 95: # 'A' 학점으로 list에 추가합니다. grades.append('A') # 아니고, 이 값보다 크면, elif row > 90: # 'A-' 학점으로 list에 추가합니다. grades.append('A-') # 아니고, 이 값보다 크면, elif row > 85: # 'B' 학점으로 list에 추가합니다. grades.append('B') # 아니고, 이 값보다 크면, elif row > 80: # 'B-' 학점으로 list에 추가합니다. grades.append('B-') # 아니고, 이 값보다 크면, elif row > 75: # 'C' 학점으로 list에 추가합니다. grades.append('C') # 아니고, 이 값보다 크면, elif row > 70: # 'C-' 학점으로 list에 추가합니다. grades.append('C-') # 아니고, 이 값보다 크면, elif row > 65: # 'D' 학점으로 list에 추가합니다. grades.append('D') # 아니고, 이 값보다 크면, elif row > 60: # 'D-' 학점으로 list에 추가합니다. grades.append('D-') # 아니면, else: # 'F' 학점을 추가합니다. grades.append('Failed') # list(리스트)로부터 'grades'열을 추가합니다. df['grades'] = grades

# 새로운 dataframe(데이터프레임)을 봅니다. df

student_nametest_scoregrades
0Miller76C
1Jacobson88B
2Ali84B-
3Milner67D
4Cooze53Failed
5Jacon96A
6Ryaner64D-
7Sone91A-
8Sloan77C
9Piger73C-
10Riani52Failed
11AliNaNFailed


반응형

+ Recent posts